То, что вы пропустили здесь, это часовые пояса.
Предположительно у вас пять часов свободного времени по UTC, поэтому 2013-09-01T11: 00: 00 по местному времени и 2013-09-01T06: 00: 00Z - это одно и то же время.
Вы должны прочитать верхнюю часть datetime
документации, которая объясняет часовые пояса и "наивные" и "осведомленные" объекты.
Если ваша первоначальная наивная дата-время была в формате UTC, utcfromtimestamp
вместо нее можно использовать способ восстановления fromtimestamp
.
С другой стороны, если ваша первоначальная наивная дата-время была локальной, вы не должны были сначала вычесть из нее метку времени UTC; используйте datetime.fromtimestamp(0)
вместо этого.
Или, если у вас был осведомленный объект datetime, вам нужно либо использовать локальную (осведомленную) эпоху с обеих сторон, либо явно конвертировать в и из UTC.
Если у вас есть Python 3.3 или более поздней версии или вы можете обновить его, вы можете избежать всех этих проблем, просто используя timestamp
метод, а не пытаясь понять, как это сделать самостоятельно. И даже если вы этого не сделаете, вы можете рассмотреть возможность заимствования его исходного кода .
(И если вы можете подождать Python 3.4, похоже, что PEP 341 , вероятно, войдет в финальную версию, а это означает, что все то, о чем мы с Дж. Ф. Себастьяном говорили в комментариях, должно быть выполнимо только с помощью stdlib, и работает одинаково на Unix и Windows.)