from - python strftime timezone




Python-Zeitzonenumwandlung (5)

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

Wenn du time hast

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

kann tun, was Sie wollen. Aber Zeitzonen sind ziemlich komplexe Dinge, so kann es erheblich komplizierter werden - siehe simple-date .

Ich bin auf der Suche nach einem schnellen Weg, um eine Zeit einzugeben und dann Python in andere Zeitzonen umwandeln (vielleicht bis zu 10 verschiedene Zeitzonen)

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



Ich hoffe, ich bin nicht zu spät!

Die pendulum Bibliothek zeichnet sich bei dieser und anderen Datum-Zeit-Berechnungen aus.

>>> import pendulum
>>> some_time_zones = ['Europe/Paris', 'Europe/Moscow', 'America/Toronto', 'UTC', 'Canada/Pacific', 'Asia/Macao']
>>> heres_a_time = '1996-03-25 12:03 -0400'
>>> pendulum_time = pendulum.datetime.strptime(heres_a_time, '%Y-%m-%d %H:%M %z')
>>> for tz in some_time_zones:
...     tz, pendulum_time.astimezone(tz)
...     
('Europe/Paris', <Pendulum [1996-03-25T17:03:00+01:00]>)
('Europe/Moscow', <Pendulum [1996-03-25T19:03:00+03:00]>)
('America/Toronto', <Pendulum [1996-03-25T11:03:00-05:00]>)
('UTC', <Pendulum [1996-03-25T16:03:00+00:00]>)
('Canada/Pacific', <Pendulum [1996-03-25T08:03:00-08:00]>)
('Asia/Macao', <Pendulum [1996-03-26T00:03:00+08:00]>)

Answer listet die Namen der Zeitzonen auf, die mit Pendel verwendet werden können. (Sie sind die gleichen wie für Pytz.)


Um eine Zeit in einer Zeitzone in eine andere Zeitzone in Python zu konvertieren, könnten Sie astimezone :

time_in_new_timezone = time_in_old_timezone.astimezone(new_timezone)

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

#!/usr/bin/env python3
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 die Syntax von f"" nicht verfügbar ist, können Sie sie durch "".format(**vars()) ersetzen.

wo du aware_dt von der aktuellen Zeit in der lokalen Zeitzone setzen aware_dt :

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-Zeichenfolge 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 könnte aussehen: '2016-11-19 02:21:42' . Es entspricht time_format = '%Y-%m-%d %H:%M:%S' .

is_dst=None erzwingt eine Ausnahme, wenn die Zeichenfolge für die Eingabezeit einer nicht vorhandenen oder mehrdeutigen lokalen Zeit entspricht, z. B. während eines DST-Übergangs. Sie könnten auch is_dst=False , is_dst=True . Siehe Links mit mehr Details bei Python: Wie konvertierst du Datetime / Timestamp von einer Zeitzone in eine andere?


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 Zeichenfolge
  • 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']




timezone