Ce que vous avez manqué ici, ce sont les fuseaux horaires.
Vous avez probablement cinq heures de congé UTC, donc 2013-09-01T11: 00: 00 local et 2013-09-01T06: 00: 00Z sont la même heure.
Vous devez lire le haut de la datetime
documentation, qui explique les fuseaux horaires et les objets «naïfs» et «conscients».
Si votre datetime naïf d'origine était UTC, le moyen de le récupérer est d'utiliser à la utcfromtimestamp
place de fromtimestamp
.
D'un autre côté, si votre datetime naïve d'origine était locale, vous n'auriez pas dû en soustraire un horodatage UTC en premier lieu; utiliser à la datetime.fromtimestamp(0)
place.
Ou, si vous aviez un objet datetime conscient, vous devez soit utiliser une époque locale (consciente) des deux côtés, soit convertir explicitement vers et depuis UTC.
Si vous avez ou pouvez mettre à niveau vers Python 3.3 ou version ultérieure, vous pouvez éviter tous ces problèmes en utilisant simplement la timestamp
méthode au lieu d'essayer de comprendre comment le faire vous-même. Et même si vous ne le faites pas, vous pouvez envisager d' emprunter son code source .
(Et si vous pouvez attendre Python 3.4, il semble que PEP 341 est susceptible de faire partie de la version finale, ce qui signifie que tout ce dont JF Sebastian et moi parlions dans les commentaires devrait être faisable avec juste la bibliothèque stdlib, et fonctionnant de la même manière sous Unix et Windows.)