383

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

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
4

9 回答 9

444

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

import time

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

例如:

import time

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

print(my_time)
于 2012-09-13T06:27:03.530 回答
274

您还可以使用datetime

>>> import datetime
>>> datetime.datetime.fromtimestamp(1347517370).strftime('%c')
  '2012-09-13 02:22:50'
于 2013-04-11T16:09:44.527 回答
89
>>> 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'
于 2017-10-24T15:19:25.420 回答
19

这就是你需要的

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'

请输入 afloat而不是 anint并且其他TypeError应该消失。

mend = time.gmtime(float(getbbb_class.end_time)).tm_hour
于 2012-09-13T06:34:02.683 回答
12

试试这个:

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

于 2012-09-13T06:22:01.597 回答
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 命令。

于 2013-10-20T04:02:14.740 回答
7

如果您有以毫秒为单位的纪元,则可能的解决方案是将其转换为秒:

import time
time.ctime(milliseconds/1000)

更多time功能:https ://docs.python.org/3/library/time.html#functions

于 2020-09-03T16:38:54.773 回答
5

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

于 2012-09-13T06:25:32.743 回答
0

分享一个答案以清楚地区分 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')
于 2021-12-04T17:02:04.127 回答