En programmation, il est souvent nécessaire de convertir les dates-heures entre différents fuseaux horaires. La bibliothèque Python standard fournit des fonctionnalités limitées pour cela, mais il est possible de réaliser une conversion de base sans dépendances externes.
Étant donné une instance datetime UTC créée avec datetime.utcnow(), comment pouvons-nous le convertir en une instance datetime locale, en utilisant uniquement la bibliothèque standard Python ? De plus, comment obtenir le fuseau horaire local par défaut ?
Python 3.3 :
<code class="python">from datetime import datetime, timezone def utc_to_local(utc_dt): return utc_dt.replace(tzinfo=timezone.utc).astimezone(tz=None)</code>
Python 2/3 ( en utilisant un horodatage entier :
<code class="python">import calendar from datetime import datetime, timedelta def utc_to_local(utc_dt): timestamp = calendar.timegm(utc_dt.timetuple()) local_dt = datetime.fromtimestamp(timestamp) return local_dt.replace(microsecond=utc_dt.microsecond)</code>
Python 2/3 (avec dépendance pytz) :
<code class="python">import pytz local_tz = pytz.timezone('Europe/Moscow') # use local timezone name here def utc_to_local(utc_dt): local_dt = utc_dt.replace(tzinfo=pytz.utc).astimezone(local_tz) return local_tz.normalize(local_dt)</code>
<code class="python">def aslocaltimestr(utc_dt): return utc_to_local(utc_dt).strftime('%Y-%m-%d %H:%M:%S.%f %Z%z') print(aslocaltimestr(datetime(2010, 6, 6, 17, 29, 7, 730000))) print(aslocaltimestr(datetime(2010, 12, 6, 17, 29, 7, 730000))) print(aslocaltimestr(datetime.utcnow()))</code>
2010-06-06 21:29:07.730000 MSD+0400 2010-12-06 20:29:07.730000 MSK+0300 2012-11-08 14:19:50.093745 MSK+0400
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!