Konvertieren der Epochenzeit mit Millisekunden in Datum / Uhrzeit


77

Ich habe ein Ruby-Skript verwendet, um den ISO-Zeitstempel in eine Epoche umzuwandeln. Die Dateien, die ich analysiere, haben die folgende Zeitstempelstruktur:

2009-03-08T00:27:31.807

Da ich Millisekunden behalten möchte, habe ich folgenden Ruby-Code verwendet, um ihn in die Epochenzeit zu konvertieren:

irb(main):010:0> DateTime.parse('2009-03-08T00:27:31.807').strftime("%Q")
=> "1236472051807"

Aber in Python habe ich Folgendes versucht:

import time 
time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(1236472051807))

Aber ich bekomme nicht die ursprüngliche Uhrzeit zurück,

>>> time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(1236472051807))
'41152-03-29 02:50:07'
>>> 

Ich frage mich, ob es damit zusammenhängt, wie ich formatiere.

Antworten:


142

Verwendung datetime.datetime.fromtimestamp:

>>> import datetime
>>> s = 1236472051807 / 1000.0
>>> datetime.datetime.fromtimestamp(s).strftime('%Y-%m-%d %H:%M:%S.%f')
'2009-03-08 09:27:31.807000'

%fDirektive wird nur von unterstützt datetime.datetime.strftime, nicht von time.strftime.

UPDATE Alternative verwendet %, str.format:

>>> import time
>>> s, ms = divmod(1236472051807, 1000)  # (1236472051, 807)
>>> '%s.%03d' % (time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(s)), ms)
'2009-03-08 00:27:31.807'
>>> '{}.{:03d}'.format(time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(s)), ms)
'2009-03-08 00:27:31.807'

2
Ja, ich wollte das vorschlagen ... aber meh gute Antwort (+1 für die Erhaltung der Millisekunden im Display :))
— Joran Beasley

Tolle Antwort auch @JoranBeasley deine ist auch toll :) Danke Jungs.
— Add-Semikolons

Bitte beachten Sie, dass die erste Antwort von @falsetru durch Gleitkomma dividiert wird, 1000.0wodurch die Millisekunden in der Datumszeit beibehalten werden.
— Lorenzo Belli

Vielen Dank. Genau das, wonach ich gesucht habe
— Anish

17

das sind milisekunden, dividiere sie einfach durch 1000, da gmtime sekunden erwartet ...

time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(1236472051807/1000.0))

4
Ich verstehe, aber ich werde die Millisekunden verlieren, oder?
— Add-Semikolons

1
ja ... ich denke, Sie können sie behalten, indem Sie dies tun, timestamp/1000.0 wodurch sie als Dezimalzahl übergeben werden ... (obwohl ich nicht sicher bin , ob Sie sie abrufen können)
— Joran Beasley

Gibt es ein Äquivalent zu gmtime, das Mikro- oder Millisekunden als Eingabe benötigt?
— Rutger Hofste

1
seconds == milliseconds/1000... wenn Sie dies in eine Funktion setzen, haben Sie eine gmtime, die Millisekunden akzeptiert ... Mikrosekunden, die Sie einfach durch 10 ^ 6 teilen
— Joran Beasley
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.