Перетворення часу епохи в час дати


302

Я отримую відповідь від решти такого формату часу, як епоха

start_time = 1234566
end_time = 1234578

Я хочу перетворити цю епоху секунд у час формату MySQL, щоб я міг зберігати відмінності у своїй базі даних MySQL.

Я намагався:

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

Наведений вище результат - це не те, чого я очікую. Я хочу, щоб це було так

2012-09-12 21:00:00

Підкажіть, будь ласка, як я можу цього досягти?

Крім того , чому я отримую TypeError: a float is requiredза

>>> getbbb_class.end_time = 1347516459425
>>> mend = time.gmtime(getbbb_class.end_time).tm_hour
Traceback (most recent call last):
  ...
TypeError: a float is required

Ви впевнені 1347516459425? Це не дійсна епоха. Спробуйте, time.gmtime(float(str(i)[:-6]+'.'+str(i)[-6:]))де iє 1347516459425.
Бурхан Халід

@Burhan Як ти виявив, що це не дійсна епоха?
користувач1667633

2
Тому що епоха знаходиться лише в діапазоні ~ 10¹⁰. Спробуйте використовувати time.ctime (1347516459.425), це дасть вам 13 вересня 12 року. Зверніть увагу на десяткові.
Pax Vobiscum

7
Будь ласка, перестаньте називати це "епоховим часом", коли маєте на увазі Unix Time . Було багато різних епох, що використовуються в обчисленні .
Метт Джонсон-Пінт

Раніше я брав епоху = unix = posix ... дякую за вказівку на це.
Бен

Відповіді:


353

Щоб конвертувати значення часу (float або int) у відформатований рядок, використовуйте:

time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1347517370))

3
time.strearch ('% Y-% m-% d% H:% M:% S', time.localtime (1347517491247)) '44671-02-17 11:44:07' чому?
користувач1667633

3
Звідки у вашому прикладі взявся час "1347517491247"? Це реальна цінність часу, яку ви використовуєте?
ron rothman

насправді я отримую це значення від сервера
bigbluebutton

20
time.strearch ('% Y-% m-% d% H:% M:% S', time.localtime (1347517491.247)) '2012-09-13 08:24:51' Ваше значення епоха в мс
MatthieuW

1
див. docs.python.org/2/library/time.html#time.strearch для отримання додаткової інформації у рядку формату
georg

220

Ви також можете використовувати datetime:

>>> import datetime
>>> datetime.datetime.fromtimestamp(1347517370).strftime('%c')
  '2012-09-13 02:22:50'

3
в який часовий пояс це перетворює, що робити, якщо я хочу опинитися у певному часовому поясі. ?
garg10may

4
@ garg10may час епізоду завжди зміщений UTC 0, тому рядок також буде зміщеним UTC 0. Це рівносильно часовому поясу зулу (+00: 00). Більше ви можете прочитати тут: timeanddate.com/time/zones/z
Devnetics

6
Існує функція 'utcfromtimestamp', щоб отримати час UTC у python 3.
vwvolodya

Перевага використання цієї відповіді полягає в тому, що версія datetime strftime()підтримує більше форматування заповнювачів, особливо% f для переносу часу мікросекунди. З невідомих причин time.strftime()це не підтримує, хоча мікросекунди можуть бути представлені у плаваючому значенні, яке вводиться 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

Щоб отримати UTC:

>>> datetime.datetime.utcfromtimestamp(1347517370).strftime('%Y-%m-%d %H:%M:%S')
  '2012-09-13 06:22:50'

doc каже, що віддає перевагу колишньому
qrtLs

14

Це те, що вам потрібно

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'

Будь ласка, введіть floatзамість того, intа інше TypeErrorмає піти.

mend = time.gmtime(float(getbbb_class.end_time)).tm_hour

10

Спробуйте це:

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

Також у MySQL вам можуть FROM_UNIXTIMEсподобатися:

INSERT INTO tblname VALUES (FROM_UNIXTIME(1347517119))

Для вашого 2-го питання це, мабуть, тому getbbb_class.end_time, що це рядок. Ви можете перетворити його в числовий, наприклад:float(getbbb_class.end_time)


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)

Це трохи більше слово, але воно походить від команди date в unix.


3

Спочатку трохи інформації в епоху від людини 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).

щоб зрозуміти, якою має бути епоха.

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

просто переконайтесь, що аргумент, до якого ви переходите, time.gmtime()є цілим.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.