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

时间:2009-11-08 20:23:23

标签: python datetime

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

我有一个提供第一个库的库和第二个想要第二个库的库...

3 个答案:

答案 0 :(得分:363)

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

from datetime import datetime
from time import mktime

dt = datetime.fromtimestamp(mktime(struct))

答案 1 :(得分:121)

像这样:

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

答案 2 :(得分:34)

这不是你问题的直接答案(已经很好地回答了)。然而,有几次我曾经多次咬过基础,我不能强调你应该仔细研究你的time.struct_time对象提供的内容,以及其他时间字段可能有的内容。

假设你同时拥有一个time.struct_time对象和一些其他日期/时间字符串,请比较两者,并确保你没有丢失数据并无意中创建一个天真的日期时间对象,否则你可以这样做。

例如,优秀的feedparser模块将返回“已发布”字段,并可能在其“published_pa​​rsed”字段中返回time.struct_time对象:

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)

现在请注意您在“已发布”字段中实际获得的内容。

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

Stallman的胡子!时区信息!

在这种情况下,懒人可能想使用优秀的dateutil模块来保存时区信息:

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

给了我们:

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或您认为很棒的任何时间。