Deutsch   English   Français   Italiano  
<u3reda$291m$1@cabale.usenet-fr.net>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!news.eternal-september.org!news.gegeweb.eu!gegeweb.org!usenet-fr.net!.POSTED!not-for-mail
From: Olivier Miakinen <om+news@miakinen.net>
Newsgroups: fr.comp.lang.python
Subject: =?UTF-8?Q?Re:_datetime_:_passer_d'=c2=ab_offset-naive_=c2=bb_=c3=a0?=
 =?UTF-8?Q?_=c2=ab_offset-aware_=c2=bb?=
Date: Sun, 14 May 2023 21:56:26 +0200
Organization: There's no cabale
Lines: 36
Message-ID: <u3reda$291m$1@cabale.usenet-fr.net>
References: <u3rcqv$28fu$1@cabale.usenet-fr.net>
NNTP-Posting-Host: 200.89.28.93.rev.sfr.net
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-15
Content-Transfer-Encoding: 8bit
X-Trace: cabale.usenet-fr.net 1684094186 74806 93.28.89.200 (14 May 2023 19:56:26 GMT)
X-Complaints-To: abuse@usenet-fr.net
NNTP-Posting-Date: Sun, 14 May 2023 19:56:26 +0000 (UTC)
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
 Firefox/52.0 SeaMonkey/2.49.4
In-Reply-To: <u3rcqv$28fu$1@cabale.usenet-fr.net>
Bytes: 2391

Re-bonjour,

Le 14/05/2023 21:29, Olivier Miakinen a écrit :
> 
> Je voudrais pouvoir comparer en python des dates de courriels, au format défini
> par le RFC2822. Pour cela, j'utilise la fonction parsedate_to_datetime() qui est
> définie dans le module email.utils :
> 
> from email.utils import parsedate_to_datetime
> date = parsedate_to_datetime("Sat, 13 May 2023 12:00:00 +0200")
> 
> [...] comment détecter qu'un datetime n'a pas de tzinfo, et dans
> ce cas seulement lui coller le tzinfo=datetime.timezone.utc ? Ou bien, autre
> solution, est-ce que je peux remplacer parsedate_to_datetime() par une fonction
> qui définirait bien le tzinfo dans tous les cas ?

Bon, RTFM comme on dit, j'ai lu le manuel et j'arrive à ça :

===============================================================
from email.utils import parsedate_to_datetime
from datetime import datetime, timezone

def my_parsedate(rfc2822_date):
    d = parsedate_to_datetime(rfc2822_date)
    if (d.tzinfo is None) or (d.tzinfo.utcoffset(d) is None):
        # d is a naive timedate, make it aware
        d = datetime.combine(d.date(), d.time(), timezone.utc)
    return d
===============================================================

Est-ce que ça vous semble correct ? Et si même ça l'est, y aurait-il mieux ?


Cordialement,
-- 
Olivier Miakinen