我从其他人那里得到的响应是一个纪元时间格式,如

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
 


#1 楼

要将时间值(浮点型或整数型)转换为格式字符串,请使用:

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


评论


time.strftime('%Y-%m-%d%H:%M:%S',time.localtime(1347517491247))'44671-02-17 11:44:07'为什么?

–user1667633
2012年9月13日下午6:35

在您的示例中,时间“ 1347517491247”从何而来?您使用的是实时值吗?

–ron rothman
2012年9月13日下午6:39

实际上我是从bigbluebutton服务器获得该价值的

–user1667633
2012年9月13日下午6:43

time.strftime('%Y-%m-%d%H:%M:%S',time.localtime(1347517491.247))'2012-09-13 08:24:51'您的值是一个以毫秒为单位的纪元

– MatthieuW
2012年9月13日在8:21



有关格式字符串的更多信息,请参见docs.python.org/2/library/time.html#time.strftime

–georg
13年7月27日在21:01

#2 楼

您也可以使用datetime

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


评论


该转换在哪个时区进行,如果我想在特定时区中进行转换,该怎么办。 ?

–garg10may
16年7月12日在9:29

@ garg10may epoch时间始终是UTC偏移0,因此字符串也将是UTC偏移0。这等效于Zulu时区(+00:00)。您可以在此处阅读更多信息:timeanddate.com/time/zones/z

–开发
17年1月10日在20:36

有'utcfromtimestamp'函数可在python 3中获取UTC时间。

–vwvolodya
18年1月4日在18:30

使用此答案的优点是strftime()的日期时间版本支持更多格式的占位符,尤其是%f表示时间的微秒部分。由于未知的原因,尽管可以在输入到time.localtime()的浮点值中表示微秒,但time.strftime()不支持该功能。

–安德烈亚斯·迈耶(Andreas Maier)
19年8月13日在4:39

取而代之的是给我-““ 2020年10月31日星期六18:30:00”。如您所说-'2012-09-13 02:22:50'应该是-“%Y /%m /%d,%H:%M:%S”

–阿克斯哈扎里(Akshay Hazari)
20/12/22在4:44



#3 楼

>>> 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
20-04-14在19:07

#4 楼

这就是您所需要的

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


#5 楼

试试这个:

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

#6 楼

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


这有点罗word,但它来自UNIX中的date命令。

#7 楼

首先来自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()的arg是整数。

#8 楼

如果纪元以毫秒为单位,则可能的解决方案将转换为秒:
import time
time.ctime(milliseconds/1000)

更多time函数:https://docs.python.org/3/library/time.html#functions