datetime strftime не выводит правильную метку времени

Последующий:

>>> from dateutil.parser import parse
>>> parse("2013-07-02 00:00:00 -0000")
datetime.datetime(2013, 7, 2, 0, 0, tzinfo=tzutc())

показывает, что время должно быть 12:00 2 июля 2013 года по UTC.

Однако:

>>> parse("2013-07-02 00:00:00 -0000").strftime("%s")
'1372744800'

1372744800 на самом деле вторник, 02 июля 2013 г., 06:00:00 UTC, что неверно. Очень смущенный.


person Josh Nankin    schedule 02.07.2013    source источник
comment
Откуда вы импортируете parse?   -  person David Robinson    schedule 02.07.2013
comment
Не удалось воспроизвести; Я получаю 1372741200 (часом раньше). Почти уверен, что это проблема часового пояса.   -  person David Robinson    schedule 02.07.2013
comment
это все равно неправильно, это просто в другом ТЗ. еще более странно: parse(2013-07-02 00:00:00 -0000).strftime(%s %z) даст вам 1372744800 +0000, что означает, что strftime считает, что это UTC.   -  person Josh Nankin    schedule 02.07.2013
comment
связанная проблема в системе отслеживания ошибок Python: datetime.strftime('%s') должен учитывать tzinfo   -  person jfs    schedule 25.06.2014


Ответы (1)


См. этот вопрос: Преобразование даты и времени python в эпоху с помощью strftime

На самом деле Python не поддерживает %s в качестве аргумента для strftime (если вы посмотрите на http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior его нет в списке), единственная причина, по которой он работает, заключается в том, что Python передает информацию к strftime вашей системы, который использует ваш местный часовой пояс.

person kissgyorgy    schedule 02.07.2013
comment
спасибо, это сработало. люди говорят, что python намного лучше языка, чем PHP (откуда я родом), но в PHP с DateTime это было бы не так сложно или запутанно. - person Josh Nankin; 02.07.2013
comment
Вы должны проверить pytz и делориан. Это упрощает работу с datetime. Также проверьте эту тему на Reddit! - person kissgyorgy; 02.07.2013