Konvertieren der Epochenzeit in die Datumszeit

303

Ich bekomme eine Antwort vom Rest ist ein Epoch-Zeitformat wie

start_time = 1234566
end_time = 1234578

Ich möchte diese Epoche in die Zeit des MySQL-Formats konvertieren, damit ich die Unterschiede in meiner MySQL-Datenbank speichern kann.

Ich habe es versucht:

>>> import time
>>> time.gmtime(123456)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=2, tm_hour=10, tm_min=17, tm_sec=36, tm_wday=4, tm_yday=2, tm_isdst=0)

Das obige Ergebnis ist nicht das, was ich erwarte. Ich möchte, dass es so ist

2012-09-12 21:00:00

Bitte schlagen Sie vor, wie ich dies erreichen kann.

Auch, warum ich TypeError: a float is requiredfür bekomme

>>> getbbb_class.end_time = 1347516459425
>>> mend = time.gmtime(getbbb_class.end_time).tm_hour
Traceback (most recent call last):
  ...
TypeError: a float is required
user1667633
quelle
Bist du dir sicher 1347516459425? Dies ist keine gültige Epoche. Versuchen Sie, time.gmtime(float(str(i)[:-6]+'.'+str(i)[-6:]))wo iist 1347516459425.
Burhan Khalid
@ Burhan Wie haben Sie festgestellt, dass dies keine gültige Epoche ist?
user1667633
2
Weil eine Epoche nur im Bereich von ~ 10¹⁰ liegt. Versuchen Sie es mit time.ctime (1347516459.425), dies gibt Ihnen den 13. September 12. Achten Sie auf die Dezimalstelle.
Pax Vobiscum
7
Bitte hören Sie auf, es "Epochenzeit" zu nennen, wenn Sie Unix-Zeit meinen . Es gab viele verschiedene Epochen, die beim Rechnen verwendet wurden .
Matt Johnson-Pint
Früher habe ich epoch = unix = posix genommen ... danke, dass du darauf hingewiesen hast.
Ben

Antworten:

354

Verwenden Sie Folgendes, um Ihren Zeitwert (float oder int) in eine formatierte Zeichenfolge zu konvertieren:

time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1347517370))
Ron Rothman
quelle
3
time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (1347517491247)) '44671-02-17 11:44:07' warum?
user1667633
3
Woher kommt in Ihrem Beispiel die Zeit "1347517491247"? Ist es ein Echtzeitwert, den Sie verwenden?
Ron Rothman
Eigentlich bekomme ich diesen Wert vom bigbluebutton Server
user1667633
20
time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (1347517491.247)) '2012-09-13 08:24:51' Ihr Wert ist Epoche in ms
MatthieuW
1
siehe docs.python.org/2/library/time.html#time.strftime für weitere Informationen im Format - String
georg
221

Sie können auch verwenden datetime:

>>> import datetime
>>> datetime.datetime.fromtimestamp(1347517370).strftime('%c')
  '2012-09-13 02:22:50'
png
quelle
3
In welcher Zeitzone konvertiert dies? Was ist, wenn ich in einer bestimmten Zeitzone sein möchte? ?
garg10may
4
@ garg10may Epochenzeit ist immer UTC-Offset 0, daher wäre die Zeichenfolge auch UTC-Offset 0. Dies entspricht der Zulu-Zeitzone (+00: 00). Sie können mehr hier lesen: timeanddate.com/time/zones/z
Devnetics
6
Es gibt die Funktion 'utcfromtimestamp', um die UTC-Zeit in Python 3
abzurufen
Der Vorteil dieser Antwort besteht darin, dass die datetime-Version von strftime()mehr Platzhalter für die Formatierung unterstützt, insbesondere% f für den Mikrosekundenbereich der Zeit. time.strftime()Unterstützt dies aus unbekannten Gründen nicht, obwohl die Mikrosekunden in dem Float-Wert dargestellt werden können, in den eingegeben wird time.localtime().
Andreas Maier
60
>>> import datetime
>>> datetime.datetime.fromtimestamp(1347517370).strftime('%Y-%m-%d %H:%M:%S')
'2012-09-13 14:22:50' # Local time

So erhalten Sie UTC:

>>> datetime.datetime.utcfromtimestamp(1347517370).strftime('%Y-%m-%d %H:%M:%S')
  '2012-09-13 06:22:50'
user799188
quelle
doc sagt, es bevorzugt ehemalige
qrtLs
14

Das brauchen Sie

In [1]: time.time()
Out[1]: 1347517739.44904

In [2]: time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(time.time()))
Out[2]: '2012-09-13 06:31:43'

Bitte geben Sie ein floatstatt eines ein intund das andere TypeErrorsollte verschwinden.

mend = time.gmtime(float(getbbb_class.end_time)).tm_hour
Ronak
quelle
10

Versuche dies:

>>> import time
>>> time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(1347517119))
'2012-09-12 23:18:39'

Auch in MySQL können Sie FROM_UNIXTIMEmögen:

INSERT INTO tblname VALUES (FROM_UNIXTIME(1347517119))

Bei Ihrer zweiten Frage liegt es wahrscheinlich daran, dass es sich getbbb_class.end_timeum eine Zeichenfolge handelt. Sie können es wie folgt in numerische konvertieren:float(getbbb_class.end_time)

Dkamins
quelle
8
#This adds 10 seconds from now.
from datetime import datetime
import commands

date_string_command="date +%s"
utc = commands.getoutput(date_string_command)
a_date=datetime.fromtimestamp(float(int(utc))).strftime('%Y-%m-%d %H:%M:%S')
print('a_date:'+a_date)
utc = int(utc)+10
b_date=datetime.fromtimestamp(float(utc)).strftime('%Y-%m-%d %H:%M:%S')
print('b_date:'+b_date)

Dies ist etwas wortreicher, kommt aber vom Datumsbefehl unter Unix.

user2899300
quelle
3

Zuerst ein paar Infos in der Epoche von man gmtime

The ctime(), gmtime() and localtime() functions all take an argument of data type time_t which represents calendar  time.   When  inter-
       preted  as  an absolute time value, it represents the number of seconds elapsed since 00:00:00 on January 1, 1970, Coordinated Universal
       Time (UTC).

zu verstehen, wie die Epoche sein sollte.

>>> time.time()
1347517171.6514659
>>> time.gmtime(time.time())
(2012, 9, 13, 6, 19, 34, 3, 257, 0)

Stellen Sie einfach sicher, dass das Argument, an das Sie übergeben, time.gmtime()eine Ganzzahl ist.

tuxuday
quelle