将Epoch时间转换为日期时间

420

我从REST API获取的响应是一个Epoch时间格式,例如:

start_time = 1234566
end_time = 1234578

我希望将那个以 epoch 秒形式表示的时间转换成 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:需要浮点数

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

490

要将您的时间值(浮点数或整数)转换为格式化字符串,请使用以下代码:

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

在此之前需要导入以下内容:

from time import strftime, localtime

303

你也可以使用datetime

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

103
>>> 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'

针对UTC时间,为什么不使用time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(1347517370)) - Islam Azab

21

这就是你需要的

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

14

试试这个:

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


12

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)

这些话比较啰嗦,但它们来自Unix中的date命令。


6

首先,从 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()的参数是整数。


5

分享一种清晰区分UTC和本地时间转换的方法。在使用以下方法之前,请在顶部使用import datetime

将时间转换为本地机器时区的日期时间

datetime.datetime.fromtimestamp(1347517370)

转换为UTC时区的日期时间

datetime.datetime.utcfromtimestamp(1347517370)

无论使用哪种方法,如果您想返回格式化的日期字符串,请使用以下代码块。
datetime.datetime.fromtimestamp(1347517370).strftime('%Y-%m-%d %H:%M:%S')
datetime.datetime.utcfromtimestamp(1347517370).strftime('%Y-%m-%d %H:%M:%S')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接