2010-11-01 15 views
11

Najtrudniej próbuję uzyskać aktualny czas w strefie czasowej EDT.Python - datetime określonej strefy czasowej

print datetime.time(datetime.now()).strftime("%H%M%S") 

datetime.now ([TZ]) ma opcjonalny argument tz, ale to musi być typu datetime.tzinfo ... Nie mam ben stanie dowiedzieć się, w jaki sposób zdefiniować obiekt tzinfo Wschodniej timezone ... Wydaje się, że powinno być całkiem proste, ale nie mogę tego zrozumieć bez importowania dodatkowej biblioteki.

Odpowiedz

20

Nie jestem bardzo przekonany co do strefy czasowej EDT, ale ten przykład powinien służyć Twojemu celowi.

import datetime 

datetime.datetime.now należy podać informacje o strefie czasowej, które powinny być typu datetime.tzinfo. Oto klasa, która implementuje to z niektórymi wymaganymi funkcjami. Nie podaję tu szczegółów dotyczących dziennego oświetlenia, ponieważ jest to przykład.

class EST(datetime.tzinfo): 
    def utcoffset(self, dt): 
     return datetime.timedelta(hours=-5) 

    def dst(self, dt): 
     return datetime.timedelta(0) 

Teraz można to wykorzystać, aby uzyskać informacje ze strefy czasowej poprawności:

print datetime.datetime.now(EST()) 

wyjściowa:

2010-11-01 13:44:20.231259-05:00 
+0

dziękuję - frustrując trzeba stworzyć całą klasę, aby określić strefę czasową (a po prostu przekazanie prostej zmiennej) – wuntee

+0

@wuntee: To nie prawda. Miało to być wyjaśnienie. Odpowiedź przez adw zawiera bibliotekę - pytz, której można używać do przekazywania informacji o tzinfo. Fakt, że byłby on ponownie użyty i aspekty takie jak dst itp. Są już dostarczane przez moduł pytz. – pyfunc

8

Klasa tzinfo tylko definiuje interfejs, trzeba będzie wdrożyć samodzielnie (patrz przykładowa dokumentacja) lub użyj modułu innej firmy, który go implementuje, np. pytz.

Edytuj: Niestety, przegapiłem, że nie chcesz importować innej biblioteki.

+0

+1 za udostępnienie modułu pytz, ponieważ skupiłem się na wyjaśnieniu tzinfo. – pyfunc

Powiązane problemy