Що ви тут пропустили - це часові пояси.
Імовірно, у вас п’ять годин поза UTC, тому 2013-09-01T11: 00: 00 місцеві та 2013-09-01T06: 00: 00Z - це той самий час.
Вам потрібно прочитати верхню частину datetime
документів, де пояснюються часові пояси та «наївні» та «обізнані» об’єкти.
Якщо ваш початковий наївний час був UTC, спосіб відновити його - це використовувати utcfromtimestamp
замість fromtimestamp
.
З іншого боку, якщо ваш початковий наївний час був місцевим, ви не повинні віднімати від нього часову позначку UTC в першу чергу; використовувати datetime.fromtimestamp(0)
замість цього.
Або якщо у вас був обізнаний об’єкт дати, вам потрібно або використовувати локальну (обізнану) епоху з обох сторін, або явно перетворити на UTC та з нього.
Якщо у вас є або ви можете оновити його до Python 3.3 або пізнішої версії, ви можете уникнути всіх цих проблем, просто скориставшись timestamp
методом, а не намагаючись зрозуміти, як це зробити самостійно. І навіть якщо ви цього не зробите, ви можете розглянути можливість запозичення його вихідного коду .
(І якщо ви можете зачекати на Python 3.4, схоже, що PEP 341 , швидше за все, перетворить його на остаточний реліз, а це означає, що все те, про що я говорив у коментарях, і JF Себастьян слід виконувати лише за stdlib, і працює однаково і в Unix, і в Windows.)