关于python:如何将time.struct_time对象转换为datetime对象?

How do you convert a time.struct_time object into a datetime object?

如何将python time.struct_time对象转换为datetime.datetime对象?

我有一个提供第一个和第二个需要第二个的库。


使用time.mktime()将时间元组(在localtime中)转换为自epoch以来的秒数,然后使用datetime.fromtimestamp()获取datetime对象。

1
2
3
4
from datetime import datetime
from time import mktime

dt = datetime.fromtimestamp(mktime(struct))


这样地:

1
2
3
>>> structTime = time.localtime()
>>> datetime.datetime(*structTime[:6])
datetime.datetime(2009, 11, 8, 20, 32, 35)


这不是你问题的直接答案(已经很好地回答了)。然而,有几次在基础上咬了我几口,我无法强调,你应该仔细观察一下你的时间结构对象提供了什么,而其他时间字段可能提供了什么。

假设您同时具有time.struct_time对象和其他一些日期/时间字符串,请比较这两个对象,确保不会丢失数据,也不会无意中创建幼稚的datetime对象(如果可以这样做的话)。

例如,优秀的feedParser模块将返回"published"字段,并可能在其"published"字段中返回time.struct_time对象:

1
time.struct_time(tm_year=2013, tm_mon=9, tm_mday=9, tm_hour=23, tm_min=57, tm_sec=42, tm_wday=0, tm_yday=252, tm_isdst=0)

现在请注意"已发布"字段实际获得的内容。

1
Mon, 09 Sep 2013 19:57:42 -0400

靠着史泰曼的胡子!时区信息!

在这种情况下,懒汉可能希望使用优秀的dateutil模块来保留时区信息:

1
2
3
4
5
6
7
from dateutil import parser
dt = parser.parse(entry["published"])
print"published", entry["published"])
print"dt", dt
print"utcoffset", dt.utcoffset()
print"tzinfo", dt.tzinfo
print"dst", dt.dst()

这给了我们:

1
2
3
4
5
published Mon, 09 Sep 2013 19:57:42 -0400
dt 2013-09-09 19:57:42-04:00
utcoffset -1 day, 20:00:00
tzinfo tzoffset(None, -14400)
dst 0:00:00

然后,可以使用时区感知的日期时间对象将所有时间规范化为UTC或您认为很棒的任何内容。