Je dois créer une valeur "Expires" 5 minutes dans le futur, mais je dois la fournir au format UNIX Timestamp. Je l'ai jusqu'à présent, mais cela semble être un hack.
def expires():
'''return a UNIX style timestamp representing 5 minutes from now'''
epoch = datetime.datetime(1970, 1, 1)
seconds_in_a_day = 60 * 60 * 24
five_minutes = datetime.timedelta(seconds=5*60)
five_minutes_from_now = datetime.datetime.now() + five_minutes
since_epoch = five_minutes_from_now - epoch
return since_epoch.days * seconds_in_a_day + since_epoch.seconds
Existe-t-il un module ou une fonction qui effectue la conversion d'horodatage pour moi?
python
datetime
unix-timestamp
Daniel Rhoden
la source
la source
Réponses:
Une autre façon consiste à utiliser
calendar.timegm
:Il est également plus portable que le
%s
drapeaustrftime
(ce qui ne fonctionne pas sous Windows).la source
calendar.timegm(future.utctimetuple())
. Cela garantit qu'un temps UTC est passécalendar.timegm
.21600.0
secondes (6 heures) au lieu de 0,0 pour le TZ de ma machine Unixcalendar.timegm(datetime.datetime.utcnow().timetuple())
. La méthode utilisantdatetime.datetime.now().utctimetuple()
ne fonctionne pas pour moi (Python 3.2).Maintenant, en Python> = 3.3, vous pouvez simplement appeler la méthode timestamp () pour obtenir l'horodatage sous forme de flottant.
la source
datetime.now()
) est mauvais car il encourage l'utilisation d'objets datetime naïfs qui représentent l'heure locale et il peut échouer pendant les transitions DST (en raison de l'ambiguïté inhérente). Vous pouvez utiliser à lats = datetime.now(timezone.utc).timestamp()
place.utcnow()
. Je suis habitué à travailler sur des machines où le fuseau horaire est défini sur UTC, mais cela ne devrait pas être supposé dans cet extrait de code.Je viens de trouver cela, et c'est encore plus court.
la source
time.time()
peut être reculé. Pour créer une valeur "Expires" 5 minutes dans le futur, vous pourriez avoir besoin d'time.monotonic()
analogue selon votre cas d'utilisation.monotonic
possibilité de l'utiliser dépend de votre cas d'utilisation, par exemple, lesubprocess
module l'utilise pour implémenter l'timeout
option.Voici ce dont vous avez besoin:
la source
mktime(dt.timetuple())
.datetime.now(timezone.utc).timestamp()
fourni par @Tim Tisdall est la solution en Python 3.3+. Sinon,(dt - epoch).total_seconds()
pourrait être utilisé .Vous pouvez utiliser
datetime.strftime
pour obtenir l'heure sous forme Epoch, en utilisant la%s
chaîne de format:Remarque: cela ne fonctionne que sous Linux et cette méthode ne fonctionne pas avec les fuseaux horaires.
la source
ValueError: Invalid format string
).Voici une
datetime
solution moins cassée pour convertir un objet datetime en horodatage posix:Voir plus de détails sur Conversion de datetime.date en horodatage UTC en Python .
la source
la source
La clé est de vous assurer que toutes les dates que vous utilisez sont dans le fuseau horaire utc avant de commencer la conversion. Voir http://pytz.sourceforge.net/ pour savoir comment procéder correctement. En normalisant à utc, vous éliminez l'ambiguïté des transitions d'heure d'été. Ensuite, vous pouvez utiliser timedelta en toute sécurité pour calculer la distance de l'époque unix, puis convertir en secondes ou millisecondes.
Notez que l'horodatage Unix résultant est lui-même dans le fuseau horaire UTC. Si vous souhaitez voir l'horodatage dans un fuseau horaire localisé, vous devrez effectuer une autre conversion.
Notez également que cela ne fonctionnera que pour les dates après 1970.
la source
1970-01-01 00:00:00+00:00
). Pour obtenir un objet datetime naïf dans le fuseau horaire local:datetime.fromtimestamp(ts)
Ce qui suit est basé sur les réponses ci-dessus (plus une correction pour les millisecondes) et émule
datetime.timestamp()
pour Python 3 avant 3.3 lorsque les fuseaux horaires sont utilisés.Pour répondre strictement à la question posée, vous souhaitez:
datetime_timestamp
fait partie de simple-date . Mais si vous utilisiez ce package, vous taperiez probablement:qui gère de nombreux autres formats / types pour my_datetime.
la source
la source
Notez que les solutions
timedelta.total_seconds()
fonctionnent avec python-2.7 +. À utilisercalendar.timegm(future.utctimetuple())
pour les versions inférieures de Python.la source