2013-03-13 4 views
-1

Я не понимаю, почему код ниже вычитает час в эпохе метки времени UNIX (в часовом поясе UTC + 1):Timezone питон DateTime объектов

import datetime 
import pytz 
start_dt = datetime.datetime.fromtimestamp(1362268800 , pytz.utc) 
print start_dt 
# prints datetime.datetime(2013, 3, 3, 0, 0, tzinfo=<UTC>) 
print int(start_dt.strftime("%s")) 
# prints: 1362265200 (which is 2013-03-02T23:00Z) <--- I expected 1362268800 
print start_dt.strftime("%Y-%m-%dT%H:%M:%SZ") 
# prints: 2013-03-03T00:00:00Z 

Я с тех пор взломан вокруг моей проблемы, используя calendar.timegm(start_ts.timetuple()), но я принципиально задаюсь вопросом, что не так с приведенным выше кодом, и как создавать объекты datetime, которые находятся в UTC и где strftime будет печатать временную метку эпохи.

Использование «% s» специально не разрешено в соответствии с документами python. Должно ли быть явно запрещено (т. Е. Создавать исключение?), Если это приводит к запутывающим результатам?

Использование Python 2.7.3

+1

[различные способы преобразования даты, даты и времени в метку времени POSIX] (http://stackoverflow.com/a/8778548/4279) – jfs

ответ

1

Использование "% s" специально не разрешено в соответствии с питона документы. Должно ли быть явно запрещено (т. Е. Создавать исключение?), Если оно приводит к запутывающим результатам?

От the docs:

Полный набор кодов формата поддерживаемых варьируется в зависимости от платформы, , поскольку Python вызывает функцию на платформу C библиотеки STRFTIME(), и вариации платформы являются общими.

Существует открытая проблема в Python багтрекер "datetime.strftime('%s') should respect tzinfo" добавить явную поддержку "%s":

> казалось бы, проблема заключается в STRFTIME()

Да, STRFTIME (» % s ') игнорирует tzinfo на данный момент. Это не ошибка. Поддержка формата формата «% s» является случайным и не документирована в Python.

Смежные вопросы