343 votes

Convertir la date de la chaîne en horodatage en Python

Comment convertir une chaîne au format "%d/%m/%Y" en horodatage?

 "01/12/2011" -> 1322697600
 

446voto

katrielalex Points 40655
>>> import time
>>> import datetime
>>> s = "01/12/2011"
>>> time.mktime(datetime.datetime.strptime(s, "%d/%m/%Y").timetuple())
1322697600.0

49voto

San4ez Points 4184
>>> int(datetime.datetime.strptime('01/12/2011', '%d/%m/%Y').strftime("%s"))
1322683200

46voto

J.F. Sebastian Points 102961

Pour convertir la chaîne de caractères dans un objet date:

from datetime import date, datetime

date_string = "01/12/2011"
date_object = date(*map(int, reversed(date_string.split("/"))))
assert date_object == datetime.strptime(date_string, "%d/%m/%Y").date()

Le moyen de convertir l'objet date en POSIX timestamp dépend du fuseau horaire. À partir de la Conversion de datetime.date UTC timestamp en Python:

  • date objet représente à minuit UTC

    import calendar
    
    timestamp1 = calendar.timegm(utc_date.timetuple())
    timestamp2 = (utc_date.toordinal() - date(1970, 1, 1).toordinal()) * 24*60*60
    assert timestamp1 == timestamp2
    
  • date objet représente à minuit heure locale

    import time
    
    timestamp3 = time.mktime(local_date.timetuple())
    assert timestamp3 != timestamp1 or (time.gmtime() == time.localtime())
    

Les horodateurs sont différents, sauf à minuit UTC et l'heure locale est de la même instance.

30voto

Nowakus Points 143

La réponse dépend également de votre fuseau horaire de la date d’entrée. Si votre date est une date locale, vous pouvez utiliser la fonction mktime() comme katrielalex dit - seulement je ne vois pas pourquoi il a utilisé le datetime au lieu de cette version plus courte :

Mais observer que mon résultat est différente que la sienne, que je suis probablement dans un TZ différent (et le résultat est exempt de fuseau horaire UNIX timestamp)

Maintenant, si la date d’entrée est déjà au format UTC, que je crois que la bonne solution est :

6voto

Cryptite Points 335

Vous devez d’ abord la classe strptime pour convertir la chaîne au format struct_time.

Ensuite, utilisez simplement mktime à partir de là pour obtenir votre float.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X