2011-06-20 14 views
18

Próbuję utworzyć obiekt datetime w Pythona przy użyciu datetime i Python, przesunięcie pokazane jest nieprawidłowe.Obiekt datetime Python Pokaż niepoprawne przesunięcie timezone

import datetime 
from pytz import timezone 

start = datetime.datetime(2011, 6, 20, 0, 0, 0, 0, timezone('Asia/Kolkata')) 
print start 

Wyjście pokazany jest

datetime.datetime(2011, 6, 20, 0, 0, tzinfo=<DstTzInfo 'Asia/Kolkata' HMT+5:53:00 STD>) 

Zauważ, że 'Azja/Kalkuta' jest IST, który jest GMT + 5: 30 i nie HMT + 5: 53. To jest standardowa strefa czasowa dla systemu Linux, dlaczego mam ją źle i jak ją rozwiązać?

+0

[narzędzie do raportowania błędów pyt] (https://bugs.launchpad.net/pytz) – kojiro

+0

@kojiro: To nie jest błąd. Zobacz http://pytz.sourceforge.net/ –

Odpowiedz

34

Patrz: http://bytes.com/topic/python/answers/676275-pytz-giving-incorrect-offset-timezone

W komentarzach, ktoś proponuje wykorzystanie tzinfo.localize() zamiast konstruktora datetime, który załatwia sprawę.

>>> tz = timezone('Asia/Kolkata') 
>>> dt = tz.localize(datetime.datetime(2011, 6, 20, 0, 0, 0, 0)) 
>>> dt 
datetime.datetime(2011, 6, 20, 0, 0, tzinfo=<DstTzInfo 'Asia/Kolkata' IST+5:30:00 STD>) 

UPDATE: Faktycznie, official pytz website stwierdza, że ​​należy zawsze używać localize lub astimezone zamiast przechodzącą obiekt czasowej do datetime.datetime.

+0

Dzięki temu bardzo pomogło. – compbugs

+3

To jest takie szalone. Dzięki za odpowiedź. – Simanas

+0

Wyjaśnienie w linku bajtów jest wspaniałe, dziękuję za to! – Maxim

Powiązane problemy