Konwertowanie czasu Epoki na datę i godzinę

302

Dostaję odpowiedź od reszty to format czasu Epoki

start_time = 1234566
end_time = 1234578

Chcę przekonwertować tę epokę sekund na czas w formacie MySQL, aby móc przechowywać różnice w mojej bazie danych MySQL.

Próbowałem:

>>> 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)

Powyższy wynik nie jest tym, czego oczekuję. Chcę, żeby tak było

2012-09-12 21:00:00

Proszę zasugerować, jak mogę to osiągnąć?

Ponadto, dlaczego ja dostaję TypeError: a float is requiredza

>>> getbbb_class.end_time = 1347516459425
>>> mend = time.gmtime(getbbb_class.end_time).tm_hour
Traceback (most recent call last):
  ...
TypeError: a float is required
użytkownik1667633
źródło
Jesteś tego pewien 1347516459425? To nie jest ważna epoka. Spróbuj time.gmtime(float(str(i)[:-6]+'.'+str(i)[-6:]))gdzie ijest 1347516459425.
Burhan Khalid,
@Burhan Jak się przekonałeś, że to nie jest ważna epoka?
user1667633
2
Ponieważ epoka jest tylko w zakresie ~ 10¹⁰. Spróbuj użyć time.ctime (1347516459.425), da ci to 13 września 12. Uważaj na dziesiętne.
Pax Vobiscum,
7
Przestańcie nazywać to „czasem epoki”, jeśli chodzi o czas uniksowy . W informatyce było wiele różnych epok .
Matt Johnson-Pint,
Kiedyś brałem epoch = unix = posix ... dzięki za zwrócenie na to uwagi.
Ben

Odpowiedzi:

353

Aby przekonwertować wartość czasu (zmiennoprzecinkową lub całkowitą) na sformatowany ciąg, użyj:

time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1347517370))
Ron Rothman
źródło
3
time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (1347517491247)) '44671-02-17 11:44:07' dlaczego?
user1667633,
3
Skąd wziął się czas „1347517491247” w twoim przykładzie? Czy używasz wartości czasu rzeczywistego?
ron rothman
faktycznie otrzymuję tę wartość z serwera
bigbluebutton
20
time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (1347517491.247)) '2012-09-13 08:24:51' Twoja wartość jest epoką w ms
MatthieuW
1
zobacz docs.python.org/2/library/time.html#time.strftime, aby uzyskać więcej informacji w formacie ciągu
Georg
220

Możesz także użyć datetime:

>>> import datetime
>>> datetime.datetime.fromtimestamp(1347517370).strftime('%c')
  '2012-09-13 02:22:50'
png
źródło
3
w której strefa czasowa dokonuje konwersji, co jeśli chcę być w określonej strefie czasowej. ?
garg10may
4
@ garg10może czas epoki jest zawsze przesunięciem UTC 0, więc ciąg będzie również przesunięciem UTC 0. Jest to równoważne ze strefą czasową Zulu (+00: 00). Możesz przeczytać więcej tutaj: timeanddate.com/time/zones/z
Devnetics
6
Istnieje funkcja „utcfromtimestamp”, aby uzyskać czas UTC w python 3.
vwvolodya
Zaletą korzystania z tej odpowiedzi jest to, że wersja datetime strftime()obsługuje większą liczbę symboli zastępczych formatowania, szczególnie% f dla części czasu w mikrosekundach. Z nieznanych przyczyn time.strftime()nie obsługuje tego, chociaż mikrosekundy mogą być reprezentowane przez wartość zmiennoprzecinkową, która jest wprowadzana 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

Aby uzyskać UTC:

>>> datetime.datetime.utcfromtimestamp(1347517370).strftime('%Y-%m-%d %H:%M:%S')
  '2012-09-13 06:22:50'
użytkownik799188
źródło
doktor mówi, że woli poprzednie
qrtLs
14

Właśnie tego potrzebujesz

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'

Proszę wpisać floatzamiast, inta ten drugi TypeErrorpowinien zniknąć.

mend = time.gmtime(float(getbbb_class.end_time)).tm_hour
ronak
źródło
10

Spróbuj tego:

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

Również w MySQL możesz FROM_UNIXTIMEpolubić:

INSERT INTO tblname VALUES (FROM_UNIXTIME(1347517119))

W przypadku drugiego pytania jest to prawdopodobnie spowodowane getbbb_class.end_timeciągiem znaków. Możesz przekonwertować go na numeryczne, takie jak:float(getbbb_class.end_time)

dkaminy
źródło
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)

Jest to trochę bardziej niewygodne, ale pochodzi z polecenia date w unixie.

użytkownik 2899300
źródło
3

Najpierw trochę informacji w epoce od 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).

zrozumieć, jaka powinna być epoka.

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

upewnij się tylko, że argument, który przekazujesz, time.gmtime()jest liczbą całkowitą.

tuxuday
źródło