J'utilise les fonctions suivantes:Python 3: horodatage à datetime: d'où vient cette heure supplémentaire?
# The epoch used in the datetime API.
EPOCH = datetime.datetime.fromtimestamp(0)
def timedelta_to_seconds(delta):
seconds = (delta.microseconds * 1e6) + delta.seconds + (delta.days * 86400)
seconds = abs(seconds)
return seconds
def datetime_to_timestamp(date, epoch=EPOCH):
# Ensure we deal with `datetime`s.
date = datetime.datetime.fromordinal(date.toordinal())
epoch = datetime.datetime.fromordinal(epoch.toordinal())
timedelta = date - epoch
timestamp = timedelta_to_seconds(timedelta)
return timestamp
def timestamp_to_datetime(timestamp, epoch=EPOCH):
# Ensure we deal with a `datetime`.
epoch = datetime.datetime.fromordinal(epoch.toordinal())
epoch_difference = timedelta_to_seconds(epoch - EPOCH)
adjusted_timestamp = timestamp - epoch_difference
date = datetime.datetime.fromtimestamp(adjusted_timestamp)
return date
et de les utiliser avec le code passé:
twenty = datetime.datetime(2010, 4, 4)
print(twenty)
print(datetime_to_timestamp(twenty))
print(timestamp_to_datetime(datetime_to_timestamp(twenty)))
et obtenir les résultats suivants:
2010-04-04 00:00:00
1270339200.0
2010-04-04 01:00:00
Pour une raison quelconque, je J'obtiens un supplémentaire heure ajoutée dans le dernier appel, malgré mon code ayant, autant que je peux voir, aucun défaut.
D'où vient cette heure supplémentaire?
Est-ce encore l'heure d'été britannique? – msw
@msw Est-ce un indice déguisé sur les fuseaux horaires? ...Cela a commencé il y a environ une semaine, mais je ne vois pas où, dans mon code, il gère les informations de fuseau horaire ou agit de manière naïve plutôt que d'agir de façon non naïve? –
oui, c'était un indice, car j'obtiens les mêmes résultats et je suis aussi à l'heure avancée (en Python 2.6). Je suis maintenant en train de passer à travers l'opération datetime.tzinfo de dieu-horreur pendant que j'attends que le monde passe à http://en.wikipedia.org/wiki/Swatch_Internet_Time – msw