2009-09-09 10 views
31

Czy istnieje elegancki sposób wyświetlania bieżącego czasu w innej strefie czasowej?Python: wyświetla czas w innej strefie czasowej

chciałbym mieć coś z ogólnym duchem:

cur=<Get the current time, perhaps datetime.datetime.now()> 
print "Local time ", cur 
print "Pacific time ", <something like cur.tz('PST')> 
print "Israeli time ", <something like cur.tz('IST')> 

jakieś pomysły?

+0

Dokładny duplikat: http://stackoverflow.com/questions/117514/how-do-i-use-timezones-with-a-datetime-object-in-python –

+0

Dzięki. Nie znalazłem go, gdy szukałem tematu. –

Odpowiedz

38

Można użyć pytz Biblioteka:

>>> 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' 
+0

+1 Dokładnie to, czego potrzebowałem, dzięki! –

+1

Dla części pytania "aktualny czas" można zacząć od 'loc_dt = pytz.utc.localize (datetime.utcnow())' zamiast stałej – patricksurry

0

Można sprawdzić this question.

Lub spróbuj użyć pytz. Tutaj znajdziesz przewodnik instalacji z przykładami użycia.

7

Jednym ze sposobów, poprzez tworzenie stref czasowych biblioteki C, jest

>>> 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' 
+1

Działa to tylko w systemie Unix zgodnie z dokumentacją. Nie jestem pewien, czy to robi różnicę tutaj. –

+1

Potrzebowałem rozwiązania, które nie używa Pythona i musi działać tylko na systemach Linux, więc jest to idealne – Xandaros

+0

Ten doskonale działa w AWS Lambda bez pyta. Wielkie dzięki. – sid8491

73

Prostszy sposób:

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') 
+1

Tak, znacznie czystsza wersja! – oDDsKooL

2

To jest moje wykonanie:

from datetime import datetime 
from pytz import timezone 

def local_time(zone='Asia/Jerusalem'): 
    other_zone = timezone(zone) 
    other_zone_time = datetime.now(other_zone) 
    return other_zone_time.strftime('%T') 
+0

nie różni się od poprzedniego. tylko funkcja sformatowana i czystszy wygląd. Dodam go jako komentarz do tego. oh ... Nie mogę komentować. – OLS

-1

Potrzebuję czasu info cały czas, więc mam ten schludny skrypt .py na moim serwerze, który pozwala mi tylko wybrać i odznaczyć, które strefy czasowe mrówka do wyświetlania w kolejności wschodniej-> zachodniej.

Drukuje tak:

Australia/Sydney : 2016-02-09 03:52:29 AEDT+1100 
Asia/Singapore  : 2016-02-09 00:52:29 SGT+0800 
Asia/Hong_Kong  : 2016-02-09 00:52:29 HKT+0800 
EET     : 2016-02-08 18:52:29 EET+0200 
CET     : 2016-02-08 17:52:29 CET+0100  <- you are HERE 
UTC     : 2016-02-08 16:52:29 UTC+0000 
Europe/London  : 2016-02-08 16:52:29 GMT+0000 
America/New_York : 2016-02-08 11:52:29 EST-0500 
America/Los_Angeles : 2016-02-08 08:52:29 PST-0800 

Oto kod źródłowy jest jeden plik .py na moim github tutaj: https://github.com/SpiRaiL/timezone lub link bezpośredni plik: https://raw.githubusercontent.com/SpiRaiL/timezone/master/timezone.py

W pliku znajduje się lista tak: Po prostu umieść "p" w miejscach, które chcesz wydrukować. Wpisz "h" dla własnej strefy czasowej, jeśli chcesz ją specjalnie zaznaczyć.

(' ','America/Adak'),        (' ','Africa/Abidjan'),        (' ','Atlantic/Azores'),       (' ','GB'), 
(' ','America/Anchorage'),       (' ','Africa/Accra'),        (' ','Atlantic/Bermuda'),       (' ','GB-Eire'), 
(' ','America/Anguilla'),       (' ','Africa/Addis_Ababa'),       (' ','Atlantic/Canary'),       (' ','GMT'), 
(' ','America/Antigua'),       (' ','Africa/Algiers'),        (' ','Atlantic/Cape_Verde'),      (' ','GMT+0'), 
(' ','America/Araguaina'),       (' ','Africa/Asmara'),        (' ','Atlantic/Faeroe'),       (' ','GMT-0'), 
(' ','America/Argentina/Buenos_Aires'),    (' ','Africa/Asmera'),        (' ','Atlantic/Faroe'),        (' ','GMT0'), 
(' ','America/Argentina/Catamarca'),    (' ','Africa/Bamako'),        (' ','Atlantic/Jan_Mayen'),       (' ','Greenwich'), 
(' ','America/Argentina/ComodRivadavia'),   (' ','Africa/Bangui'),        (' ','Atlantic/Madeira'),       (' ','HST'), 
(' ','America/Argentina/Cordoba'),     (' ','Africa/Banjul'),        (' ','Atlantic/Reykjavik'),       (' ','Hongkong'), 
Powiązane problemy