我需要转换为将整数转换为datetime.time实例。我在经过的秒数内获得时间,因此它可能大于59。
我知道我可以使用以下方法创建时间对象:
import datetime
def to_time(seconds):
hours = seconds / 3600
mins = (seconds%3600)/60
sec = (seconds%3600)%60
return datetime.time(hours,mins,sec)
如果有要转换的时间值列表,我可以将其交给映射函数。但我认为这很难看。有没有更好的方法呢?
实际上,问题有点复杂。我得到一个浮点作为datetime.date.fromordinal(int(time))
返回日期的时间,to_time(time - int(time)*86400)
将返回时间。我可以将它们组合到我的datetime-object中。所以输入将是例如734869.00138889,这应该导致2013-01-01 00:02
我肯定更喜欢不那么拥挤的方法。
答案 0 :(得分:2)
最简单的方法是使用datetime.timedelta()
对象作为time
参数,并将其添加到days
;这将在一天之内关闭,因此您必须从值中减去1:
datetime.datetime.min
这避免了必须将值转换为序数的整数,然后只是时间部分的分数。
演示:
from datetime import datetime, timedelta
dt = datetime.min + timedelta(days=time - 1)
答案 1 :(得分:1)
不确定我是否理解如何将小数点后的数字转换为秒数,但我会尝试沿着这一行:
def to_datetime(time):
return datetime.datetime.fromordinal(int(time)) + \
datetime.timedelta(time % 1)
[更新]
这是你想要的结果吗?
>>> to_datetime(734869.00138889)
datetime.datetime(2013, 1, 1, 0, 2, 0, 93)