2009-07-10 24 views

Odpowiedz

10

Sprawdź moduł Python Time.

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

Pacific Standard Time

+0

Czy szukamy różnych dokumentów, czy jest to "% Z'"? – SilentGhost

+0

@ SilentGhost: "% z" i "% z" są dokładnie takie same w Pythonie. – ahawker

+11

tak, ale ** wielkie litery ** 'Z' i ** małe litery **' z' nie są. – SilentGhost

60

To powinno działać:

import time 
time.tzname 

zwraca krotki dwóch ciągów: pierwszy to nazwa lokalnej strefy czasowej non-DST, drugi jest nazwa lokalnej strefy czasowej DST.

+19

Aby zrobić to jeszcze dalej, możesz użyć 'time.tzname [time.daylight]', aby uzyskać nazwę aktualna strefa czasowa, uwzględniająca czas letni. –

+9

Znowu "time.daylight" nie oznacza, że ​​DST jest aktywne. Wskazuje jedynie, czy strefa czasowa jest obserwowana, czy nie. Szukasz "time.localtime(). Tm_isdst". – marr75

+0

Po prostu, aby dodać dla użytkowników Windows, wartości strefy czasowej zostały zdefiniowane w 'HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Strefy czasowe \' – swdev

4

Jeśli wolisz UTC przesunięcia na smyczki:

time.timezone/-(60*60) 
+4

To obliczy niepoprawnie, kiedy (/ jeśli) czasu letniego obowiązuje. – marr75

20

Daje przesunięcie UTC jak w odpowiedzi ThomasH, ale bierze pod uwagę czasu letniego.

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

Wartość time.timezone lub time.altzone w sekundach zachodzie UTC (z obszarów na wschód od UTC coraz wartość ujemną). Jest to przeciwieństwo tego, jak nam się to podoba, stąd * -1.

będzie zero, jeśli obecnie nie działają oszczędności w świetle dziennym (chociaż może to nie być poprawne, jeśli obszar ostatnio zmienił swoje prawo dotyczące oszczędności czasu letniego).

EDYCJA: marr75 jest poprawny, odpowiednio edytowałem odpowiedź.

+1

Dla bezpieczeństwa uważam, że kontrola przesunięcia powinna zostać odwrócona (altzone, jeśli dst = 1 else timezone). Jeśli status DST jest jakoś nieznany, 'tm_isdst' będzie mieć wartość" -1 ", a bieżący kod będzie domyślnie" altzone "w tym przypadku. Dla regionów, które nie używają DST, ta wartość nigdy nie jest poprawna, więc 'strefa czasowa' powinna prawdopodobnie być awarią. (Nie jestem pewien, czy '-1' jest rzeczywiście możliwe z' localtime' chociaż) – nmclean

+1

[wszystko altone, rozwiązanie oparte na strefach czasowych może zawieść w niektórych przypadkach krawędzi] (http://bugs.python.org/issue1647654) – jfs

11

Fragmenty kodu do obliczania przesunięcia są nieprawidłowe, patrz http://bugs.python.org/issue7229.

Prawidłowy sposób obsłużyć to:

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 

Jest to według wszelkiego prawdopodobieństwa, a nie dokładnym pytaniu, że PO prosił, ale są dwie nieprawidłowe fragmenty na stronie i czasowych błędów ssać wyśledzić i napraw.

+0

1. jeśli znasz 'tm_isdst'; nie musisz sprawdzać 'daylight' 2. [all' altzone', 'timezone'-based solution może zawieść w niektórych przypadkach krawędziowych] (http://bugs.python.org/issue1647654) – jfs

Powiązane problemy