2017-01-05 3 views
0
from datetime import datetime 

import pytz 

tz = pytz.timezone("Asia/Singapore") 

date_1 = datetime.now(tz=pytz.utc) 
print(date_1.replace(tzinfo=tz).replace(tzinfo=pytz.utc).timestamp()) 
print(date_1.timestamp()) 

date_2 = datetime.now(tz=tz) 
print(date_2.replace(tzinfo=pytz.utc).replace(tzinfo=tz).timestamp()) 
print(date_2.timestamp()) 

sortie:l'horodatage datetime python sont différents après remplacement fuseau horaire deux fois si tz original n'est pas utc

1483599557.338336 
1483599557.338336 
1483603457.33842 
1483599557.33842 

pourquoi les horodateurs de la variable Date_2 sont différents après tzinfo remplacé deux fois?
puisque la variable date_1 est la même.

+0

Il y a une petite période de temps qui passe entre vos impressions. Essayez d'assigner à date_1 et date_2 avant d'imprimer les deux. – rocksteady

+0

http://stackoverflow.com/questions/11473721/weird-timezone-issue-with-pytz – hoozecn

Répondre

0

Les fuseaux horaires et les décalages changent au fil des ans. Le nom de zone par défaut et le décalage fournis lorsque pytz crée un objet timezone sont les plus anciens disponibles pour cette zone, et parfois ils peuvent sembler étranges. Lorsque vous utilisez normaliser pour modifier la zone à une date, le nom de zone et le décalage appropriés sont substitués. Le simple fait d'utiliser le constructeur datetime pour attacher la zone à la date ne lui permet pas de s'ajuster correctement.

tz.normalize(pytz.utc.normalize(date_2)).timestamp() == date_2.timestamp()