仅从秒开始创建datetime.time对象

时间:2014-10-03 21:35:06

标签: python datetime

我需要转换为将整数转换为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

我肯定更喜欢不那么拥挤的方法。

2 个答案:

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