J'essaie d'ajouter deux fois ensemble. L'horodatage ISO 8601 est '1984-06-02T19: 05: 00.000Z', et je voudrais le convertir en secondes. J'ai essayé d'utiliser le module Python iso8601
, mais ce n'est qu'un analyseur.
Aucune suggestion?
Si vous voulez obtenir les secondes depuis Epoch, vous pouvez utiliser python-dateutil
pour le convertir en objet datetime
puis le convertir en quelques secondes à l'aide de la méthode strftime
. Ainsi:
>>> import dateutil.parser as dp
>>> t = '1984-06-02T19:05:00.000Z'
>>> parsed_t = dp.parse(t)
>>> t_in_seconds = parsed_t.strftime('%s')
>>> t_in_seconds
'455047500'
Vous étiez donc à mi-chemin :)
Votre date est l'heure UTC au format RFC 3339 , vous pouvez l'analyser en utilisant uniquement stdlib:
from datetime import datetime
utc_dt = datetime.strptime('1984-06-02T19:05:00.000Z', '%Y-%m-%dT%H:%M:%S.%fZ')
# Convert UTC datetime to seconds since the Epoch
timestamp = (utc_dt - datetime(1970, 1, 1)).total_seconds()
# -> 455051100.0
Voir aussi Conversion de datetime.date en horodatage UTC en Python
Comment le reconvertir au format ISO 8601?
Pour reconvertir l'horodatage POSIX, créez un objet UTC datetime et formatez-le à l'aide de la méthode .strftime()
:
from datetime import datetime, timedelta
utc_dt = datetime(1970, 1, 1) + timedelta(seconds=timestamp)
print(utc_dt.strftime('%Y-%m-%dT%H:%M:%S.%fZ'))
# -> 1984-06-02T19:05:00.000000Z
Remarque: il imprime six chiffres après la virgule décimale (microsecondes). Pour obtenir trois chiffres, voir Formatage des microsecondes à 2 décimales (en fait, conversion des microsecondes en dizaines de microsecondes).
Voici une solution en Python 3:
$ date +%s
1428030452
$ TZ=US/Pacific date -d @1428030452 '+%Y%m%d %H:%M:%S %z'
20150402 20:07:32 -0700
$ TZ=US/Eastern date -d @1428030452 '+%Y%m%d %H:%M:%S %z'
20150402 23:07:32 -0400
$ python3
>>> from datetime import datetime,timezone
>>> def iso2Epoch(ts):
... return int(datetime.strptime(ts[:-6],"%Y%m%d %H:%M:%S").replace(tzinfo=timezone.utc).timestamp()) - (int(ts[-2:])*60 + 60 * 60 * int(ts[-4:-2]) * int(ts[-5:-4]+'1'))
...
>>> iso2Epoch("20150402 20:07:32 -0700")
1428030452
>>> iso2Epoch("20150402 23:07:32 -0400")
1428030452
>>>