将大纪元时间转换为日期时间


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:]))这里i1347516459425
Burhan Khalid 2012年

@Burhan您如何发现这不是有效的纪元?
user1667633 2012年

2
因为纪元仅在〜10¹⁰的范围内。尝试使用time.ctime(1347516459.425),这会给您12年9月13日的信息。注意小数点。
Pax Vobiscum

7
当您指的是Unix Time时,请不要再称其为“ epoch time” 。在计算中使用许多不同的时代
马特·约翰逊·品脱

我曾经把epoch = unix = posix ...感谢您指出这一点。

Answers:


353

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

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 2012年

3
在您的示例中,时间“ 1347517491247”从何而来?您使用的是实时值吗?
罗恩·罗斯曼(Ron Rothman)2012年

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

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

220

您也可以使用datetime

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

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

4
@ garg10may epoch时间始终是UTC偏移0,因此字符串也将是UTC偏移0。这等效于Zulu时区(+00:00)。您可以在此处了解
Devnetics,2017年

6
有“ utcfromtimestamp”功能来获取python 3中的UTC时间
。– 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'

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

对于第二个问题,可能是因为它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)

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


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)

只要确保您要传递的arg time.gmtime()为整数即可。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.