Depuis Python 3.9, vous pouvez utiliser la fonction zoneinfo
module.
Tout d'abord, nous allons obtenir ce temps avec utcnow()
:
>>> from datetime import datetime
>>> database_time = datetime.utcnow()
>>> database_time
datetime.datetime(2021, 9, 24, 4, 18, 27, 706532)
Créez ensuite les fuseaux horaires :
>>> from zoneinfo import ZoneInfo
>>> utc = ZoneInfo('UTC')
>>> localtz = ZoneInfo('localtime')
Alors convertissez-vous. Pour convertir entre les fuseaux horaires, la datetime doit savoir dans quel fuseau horaire elle se trouve, alors nous utilisons simplement astimezone()
:
>>> utctime = database_time.replace(tzinfo=utc)
>>> localtime = utctime.astimezone(localtz)
>>> localtime
datetime.datetime(2021, 9, 24, 6, 18, 27, 706532, tzinfo=zoneinfo.ZoneInfo(key='localtime'))
Pour Python 3.6 à 3.8, vous avez besoin du module backports.zoneinfo :
>>> try:
>>> from zoneinfo import ZoneInfo
>>> except ImportError:
>>> from backports.zoneinfo import ZoneInfo
Le reste est identique.
Pour les versions antérieures à ce besoin pytz
o dateutil
. datutil fonctionne de manière similaire à zoneinfo :
>>> from dateutil import tz
>>> utc = tz.gettz('UTC')
>>> localtz = tz.tzlocal()
The Conversion:
>>> utctime = now.replace(tzinfo=UTC)
>>> localtime = utctime.astimezone(localtz)
>>> localtime
datetime.datetime(2010, 12, 30, 15, 51, 22, 114668, tzinfo=tzlocal())
pytz
a une interface différente qui est le résultat de la gestion des fuseaux horaires de Python qui ne gère pas les heures ambigües :
>>> import pytz
>>> utc = pytz.timezone('UTC')
# There is no local timezone support, you need to know your timezone
>>> localtz = pytz.timezone('Europe/Paris')
>>> utctime = utc.localize(database_time)
>>> localtime = localtz.normalize(utctime.astimezone(localtz))
>>> localtime
0 votes
Dans quel format l'heure a-t-elle été persistée dans la base de données ? S'il s'agit d'un format standard, il se peut que vous n'ayez pas besoin d'effectuer de conversion.
2 votes
Ce site réponse montre une façon simple d'utiliser pytz .
1 votes
Impossible de trouver une réponse sans recourir à
pytz
. Sentez-vous bête.