116 Stimmen

Zeigen Sie die Zeit in einer anderen Zeitzone an

Gibt es einen eleganten Weg, um die aktuelle Zeit in einer anderen Zeitzone anzuzeigen?

Ich hätte gerne etwas im allgemeinen Geist von:

cur = 
print("Ortszeit   {}".format(cur))
print("Pazifikzeit {}".format())
print("Israelische Zeit {}".format())

2 Stimmen

0 Stimmen

Danke. Konnte es nicht finden, als ich nach dem Thema gesucht habe.

3 Stimmen

150voto

Mark Theunissen Punkte 2306

Ein einfacherer Method:

from datetime import datetime
from pytz import timezone    

south_africa = timezone('Africa/Johannesburg')
sa_time = datetime.now(south_africa)
print sa_time.strftime('%Y-%m-%d_%H-%M-%S')

2 Stimmen

Ich würde sagen, dass dies die beste Methode ist.

3 Stimmen

Ich möchte keine externe Bibliothek verwenden. Ich möchte nur die nativen Bibliotheken verwenden. Wie soll ich das machen?

0 Stimmen

Pytz und datetime sind nativen Bibliotheken

86voto

Andre Miller Punkte 14657

Sie könnten die pytz Bibliothek verwenden:

>>> from datetime import datetime
>>> import pytz
>>> utc = pytz.utc
>>> utc.zone
'UTC'
>>> eastern = pytz.timezone('US/Eastern')
>>> eastern.zone
'US/Eastern'
>>> amsterdam = pytz.timezone('Europe/Amsterdam')
>>> fmt = '%Y-%m-%d %H:%M:%S %Z%z'

>>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0))
>>> print loc_dt.strftime(fmt)
2002-10-27 06:00:00 EST-0500

>>> ams_dt = loc_dt.astimezone(amsterdam)
>>> ams_dt.strftime(fmt)
'2002-10-27 12:00:00 CET+0100'

4 Stimmen

Für den Teil der Frage nach der 'aktuellen Zeit' könnten Sie mit loc_dt = pytz.utc.localize(datetime.utcnow()) anstelle einer Konstante beginnen

2 Stimmen

@patricksurry: Der Teil "aktuelle Zeit" wird in der am meisten hochgewerteten Antwort beantwortet.

0 Stimmen

Ich möchte keine externe Bibliothek verwenden. Ich möchte nur die nativen Bibliotheken verwenden. Wie soll ich das machen?

56voto

FObersteiner Punkte 16343

Python 3.9 (oder höher): verwenden Sie zoneinfo aus der Standardbibliothek:

from datetime import datetime, timezone
from zoneinfo import ZoneInfo

# Israel und US/Pacific Zeit:
now_Israel = datetime.now(ZoneInfo('Israel'))
now_Pacific = datetime.now(ZoneInfo('US/Pacific'))
print(f"Israelische Zeit {now_Israel.isoformat(timespec='seconds')}")
print(f"Pazifische Zeit {now_Pacific.isoformat(timespec='seconds')}")
# Israelische Zeit 2021-03-26T18:09:18+03:00
# Pazifische Zeit 2021-03-26T08:09:18-07:00

# zur Referenz, lokale Zeit und UTC:
now_local = datetime.now().astimezone()
now_UTC = datetime.now(tz=timezone.utc)
print(f"Lokale Zeit   {now_local.isoformat(timespec='seconds')}")
print(f"UTC          {now_UTC.isoformat(timespec='seconds')}")
# Lokale Zeit   2021-03-26T16:09:18+01:00 # Ich bin in Europe/Berlin
# UTC          2021-03-26T15:09:18+00:00

Hinweis: es gibt ein Veraltetes Shim für pytz.

Ältere Versionen von Python 3: Sie können entweder zoneinfo über das backports Modul verwenden oder stattdessen dateutil verwenden. dateutils tz.gettz folgt der gleichen Semantik wie zoneinfo.ZoneInfo:

from dateutil.tz import gettz

now_Israel = datetime.now(gettz('Israel'))
now_Pacific = datetime.now(gettz('US/Pacific'))
print(f"Israelische Zeit {now_Israel.isoformat(timespec='seconds')}")
print(f"Pazifische Zeit {now_Pacific.isoformat(timespec='seconds')}")
# Israelische Zeit 2021-03-26T18:09:18+03:00
# Pazifische Zeit 2021-03-26T08:09:18-07:00

4 Stimmen

Was ist das Problem, um datetime.now(tz=gettz('US/Pacific')) zu verwenden?

2 Stimmen

@LeonardRick das ist völlig in Ordnung! Eigentlich wollte ich diese Option auch hinzufügen, habe nie die Zeit dafür genommen. Danke für die Erinnerung ;-)

17voto

Martin v. Löwis Punkte 120025

Ein Weg, über die Zeitzoneneinstellung der C-Bibliothek, ist

>>> cur=time.time()
>>> os.environ["TZ"]="US/Pacific"
>>> time.tzset()
>>> time.strftime("%T %Z", time.localtime(cur))
'03:09:51 PDT'
>>> os.environ["TZ"]="GMT"
>>> time.strftime("%T %Z", time.localtime(cur))
'10:09:51 GMT'

4 Stimmen

Dies funktioniert nur unter Unix gemäß der Dokumentation. Bin mir jedoch nicht sicher, ob das hier einen Unterschied macht.

3 Stimmen

Ich brauchte eine Lösung, die kein pytz benötigt und nur auf Linux-Systemen ausgeführt werden muss, also ist das perfekt.

4 Stimmen

Diese funktioniert einwandfrei in AWS Lambda ohne pytz. Vielen Dank.

12voto

Vinod Punkte 121

Die kürzeste Antwort auf die Frage könnte folgendermaßen lauten:

from datetime import datetime
import pytz
print(datetime.now(pytz.timezone('Asia/Kolkata')))

Dies wird ausgegeben:

2019-06-20 12:48:56.862291+05:30

0 Stimmen

Ich möchte keine externe Bibliothek verwenden. Ich möchte nur die nativen Bibliothek verwenden. Wie soll ich das machen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X