109 Stimmen

Zeitzoneninformationen des Systems in Python abrufen?

Ich möchte die Standardzeitzone (PST) meines Systems von Python erhalten. Wie kann ich das am besten machen? Ich möchte vermeiden, einen anderen Prozess zu forken.

152voto

Johannes Weiss Punkte 49967

Das sollte funktionieren:

import time
time.tzname

time.tzname gibt ein Tupel aus zwei Zeichenketten zurück: Der erste ist der Name der lokalen Nicht-Sommerzeitzone, der zweite ist der Name der lokalen Sommerzeitzone.

Beispiel Rückgabe: ('MST', 'MDT')

44voto

wordsforthewise Punkte 10875

Ich habe festgestellt, dass dies gut funktioniert:

import datetime
tz_string = datetime.datetime.now(datetime.timezone.utc).astimezone().tzname()

So konnte ich unterscheiden, ob es sich um Sommerzeit handelt oder nicht.

Referenz mit mehr Details: https://stackoverflow.com/a/39079819/4549682

42voto

Dean Punkte 8002

Liefert einen UTC-Offset wie in der Antwort von ThomasH, berücksichtigt aber die Sommerzeit.

>>> import time
>>> offset = time.timezone if (time.localtime().tm_isdst == 0) else time.altzone
>>> offset / 60 / 60 * -1
-9

Der Wert von time.timezone o time.altzone ist in Sekunden westlich von UTC angegeben (wobei Gebiete östlich von UTC einen negativen Wert erhalten). Dies ist das Gegenteil von dem, was wir eigentlich wollen, daher der * -1.

time.localtime().tm_isdst ist Null, wenn die Sommerzeit nicht in Kraft ist (obwohl dies möglicherweise nicht korrekt ist, wenn ein Gebiet kürzlich sein Sommerzeitgesetz geändert hat).

EDIT: marr75 hat recht, ich habe die Antwort entsprechend geändert.

31voto

ahawker Punkte 3256

Überprüfen Sie die Python Zeit Modul.

from time import gmtime, strftime
print(strftime("%z", gmtime()))

Pazifische Standardzeit

12voto

marr75 Punkte 5638

Die Codeschnipsel für die Berechnung des Offsets sind falsch, siehe http://bugs.python.org/issue7229 .

Die richtige Vorgehensweise ist:

def local_time_offset(t=None):
    """Return offset of local zone from GMT, either at present or at time t."""
    # python2.3 localtime() can't take None
    if t is None:
        t = time.time()

    if time.localtime(t).tm_isdst and time.daylight:
        return -time.altzone
    else:
        return -time.timezone

Dies ist aller Wahrscheinlichkeit nach nicht die exakte Frage, die der OP gestellt hat, aber es gibt zwei fehlerhafte Snippets auf der Seite und Zeitbugs, die aufzuspüren und zu beheben sind.

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