Python-Zeitzonenumwandlung

Ich suche einen schnellen Weg, um eine Zeit einzugeben und dann python in andere Zeitzonen umzuwandeln (vielleicht bis zu 10 verschiedene Zeitzonen)

Es tut uns leid. Ich bin nicht gleich mit der Zeit in Python überhaupt, wenn jemand mich in die richtige Richtung bringen könnte, würde ich es wirklich schätzen.

6 Solutions collect form web for “Python-Zeitzonenumwandlung”

Ich habe festgestellt, dass der beste Ansatz ist, den "Moment" von Interesse zu einem utc-timezone-aware datetime-Objekt umzuwandeln (in Python ist die Zeitzonenkomponente für datetime-Objekte nicht erforderlich).

Dann können Sie astimezone verwenden , um in die Zeitzone von Interesse ( Referenz ) umzuwandeln.

from datetime import datetime import pytz utcmoment_naive = datetime.utcnow() utcmoment = utcmoment_naive.replace(tzinfo=pytz.utc) # print "utcmoment_naive: {0}".format(utcmoment_naive) # python 2 print("utcmoment_naive: {0}".format(utcmoment_naive)) print("utcmoment: {0}".format(utcmoment)) localFormat = "%Y-%m-%d %H:%M:%S" timezones = ['America/Los_Angeles', 'Europe/Madrid', 'America/Puerto_Rico'] for tz in timezones: localDatetime = utcmoment.astimezone(pytz.timezone(tz)) print(localDatetime.strftime(localFormat)) # utcmoment_naive: 2017-05-11 17:43:30.802644 # utcmoment: 2017-05-11 17:43:30.802644+00:00 # 2017-05-11 10:43:30 # 2017-05-11 19:43:30 # 2017-05-11 13:43:30 

Also, mit dem Moment des Interesses in der lokalen Zeitzone (eine Zeit, die existiert, wie in dem Kommentar von JF Sebastian erwähnt ), konvertieren Sie es in utc wie diese ( Referenz ).

 localmoment_naive = datetime.strptime('2013-09-06 14:05:10', localFormat) localtimezone = pytz.timezone('Australia/Adelaide') try: localmoment = localtimezone.localize(localmoment_naive, is_dst=None) print("Time exists") utcmoment = localmoment.astimezone(pytz.utc) except pytz.exceptions.NonExistentTimeError as e: print("NonExistentTimeError") 

Pytz verwenden

 from datetime import datetime from pytz import timezone fmt = "%Y-%m-%d %H:%M:%S %Z%z" timezonelist = ['UTC','US/Pacific','Europe/Berlin'] for zone in timezonelist: now_time = datetime.now(timezone(zone)) print now_time.strftime(fmt) 

Für Python-Zeitzonen-Conversions verwende ich den handlichen Tisch aus der PyCon 2012 Präsentation von Taavi Burns.

Um von einer Zeitzone in eine andere in Python umzuwandeln, kannst du datetime.astimezone() :

 time_in_new_timezone = time_in_old_timezone.astimezone(new_timezone) 

Angesichts aware_dt (ein datetime Objekt in einer Zeitzone), um es in andere Zeitzonen zu konvertieren und die Zeiten in einem gegebenen Zeitformat zu drucken:

 #!/usr/bin/env python import pytz # $ pip install pytz time_format = "%Y-%m-%d %H:%M:%S%z" tzids = ['Asia/Shanghai', 'Europe/London', 'America/New_York'] for tz in map(pytz.timezone, tzids): time_in_tz = aware_dt.astimezone(tz) print(f"{time_in_tz:{time_format}}") 

Wenn f"" Syntax nicht verfügbar ist, kannst du es durch "".format(**vars()) ersetzen

Wo man aus der aktuellen Zeit in der lokalen Zeitzone aware_dt setzen konnte:

 from datetime import datetime import tzlocal # $ pip install tzlocal local_timezone = tzlocal.get_localzone() aware_dt = datetime.now(local_timezone) # the current time 

Oder aus der Eingabezeit String in der lokalen Zeitzone:

 naive_dt = datetime.strptime(time_string, time_format) aware_dt = local_timezone.localize(naive_dt, is_dst=None) 

Wo time_string aussehen könnte: '2016-11-19 02:21:42+0800' .

is_dst=None erzwingt eine Ausnahme, wenn der eingegebene is_dst=None einer nicht vorhandenen oder zweideutigen Ortszeit entspricht, wie is_dst=None bei einem DST-Übergang. Sehen Sie Links mit mehr Details bei Python: Wie konvertieren Sie datetime / timestamp von einer Zeitzone in eine andere Zeitzone?

Für Python 3.2+ einfach-date ist ein Wrapper um pytz, der versucht, Dinge zu vereinfachen.

Wenn du dann eine time hast

 SimpleDate(time).convert(tz="...") 

Kann tun was du willst Aber Zeitzonen sind ziemlich komplexe Dinge, so dass es deutlich komplizierter werden kann – siehe die docs .

 import datetime import pytz def convert_datetime_timezone(dt, tz1, tz2): tz1 = pytz.timezone(tz1) tz2 = pytz.timezone(tz2) dt = datetime.datetime.strptime(dt,"%Y-%m-%d %H:%M:%S") dt = tz1.localize(dt) dt = dt.astimezone(tz2) dt = dt.strftime("%Y-%m-%d %H:%M:%S") return dt 

  • dt : Datum Zeit String
  • tz1 : Anfangszeitzone
  • tz2 : Zielzeitzone

 > convert_datetime_timezone("2017-05-13 14:56:32", "Europe/Berlin", "PST8PDT") '2017-05-13 05:56:32' > convert_datetime_timezone("2017-05-13 14:56:32", "Europe/Berlin", "UTC") '2017-05-13 12:56:32' 

 > pytz.all_timezones[0:10] ['Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau'] 
  • Wie bekomme ich einen menschlich lesbaren Zeitzonennamen in Python?
  • Ist Python's time.time () den lokalen oder UTC-Zeitstempel zurück?
  • Holen Sie sich Zeitzone von datetime.datetime.fromtimestamp ()
  • Pytz und etc / GMT-5
  • Python / Django MySQL Datetime Handling und Zeitzone
  • So fügen Sie wöchentliche Timedeltas in Bezug auf Sommerzeit hinzu
  • Ändern eines Unix-Zeitstempels in eine andere Zeitzone
  • Python bekommt aktuelle Zeit in der rechten Zeitzone
  • Javascript oder Python - Wie finde ich heraus, ob es Nacht oder Tag ist?
  • Pytz - Umwandlung von UTC und Zeitzone in Ortszeit
  • Berechnen Sie tm_isdst aus Datum und Zeitzone
  • Python ist die beste Programmiersprache der Welt.