Преобразование времени эпохи в дату и время

303

Я получаю ответ от остальных формат времени эпохи, как

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
user1667633
источник
Вы уверены 1347516459425? Это недопустимая эпоха. Попробуй time.gmtime(float(str(i)[:-6]+'.'+str(i)[-6:]))где iесть 1347516459425.
Бурхан Халид
@Burhan Как вы узнали, что это не действительная эпоха?
user1667633
2
Потому что эпоха только в диапазоне ~ 10¹⁰. Попробуйте использовать time.ctime (1347516459.425), это даст вам 13 сентября '12. Следите за десятичной дробью.
Pax Vobiscum
7
Пожалуйста, перестаньте называть это «временем эпохи», когда вы имеете в виду Unix Time . В компьютерах было много разных эпох .
Мэтт Джонсон-
Я использовал epoch = unix = posix ... спасибо, что указал на это.
Бен

Ответы:

354

Чтобы преобразовать значение времени (float или int) в форматированную строку, используйте:

time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1347517370))
Рон Ротман
источник
3
time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (1347517491247)) '44671-02-17 11:44:07' почему?
user1667633
3
Откуда пришло время «1347517491247» в вашем примере? Это значение в реальном времени вы используете?
Рон Ротман
на самом деле я получаю это значение с сервера
bigbluebutton
20
time.strftime ('% 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.strftime для получения дополнительной информации в строке формата
georg
221

Вы также можете использовать datetime:

>>> import datetime
>>> datetime.datetime.fromtimestamp(1347517370).strftime('%c')
  '2012-09-13 02:22:50'
PNG
источник
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().
Андреас Майер
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'
user799188
источник
Док говорит, что предпочитает прежний
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))

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

dkamins
источник
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.

user2899300
источник
3

Сначала немного информации в эпоху от 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).

чтобы понять, какой должна быть эпоха.

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

просто убедитесь, что аргумент, которому вы передаете, time.gmtime()является целым числом.

tuxuday
источник