Python 仅从秒创建datetime.time对象

Python 仅从秒创建datetime.time对象,python,datetime,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.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对象中。因此,输入将是例如734869.00138889,这将导致2013-01-01 00:02


我当然更喜欢不太拥挤的方法。

不确定我是否理解如何将小数点后的数字转换为秒,但我会尝试以下方法:

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)

最简单的方法是使用带有
time
值的
datetime.timedelta()对象作为
days
参数,并将其添加到
datetime.datetime.min
;这将被取消一天,所以你必须从值中减去1:

from datetime import datetime, timedelta

dt = datetime.min + timedelta(days=time - 1)
这避免了必须将序号的值转换为整数,然后将时间部分的值转换为分数

演示:


你能给我们一个时间的实际值吗?相应地编辑了这个问题。谢谢你指出。这个浮点值是来自电子表格吗?不,我的一位同事认为这是个好主意,并将它(使用python!)存储在hdf5中。我倾向于不同意见。但是,是的,我认为这是Excel方法。您可以使用
days=time%1
也许。如果要添加
timedelta()
并使其工作,您还需要使用
datetime.datetime()
。遗憾的是,这对我不起作用-第一个对象是datetime.date类型,不关心timedelta<1天:(EDIT:WORKS!使用datetime.datetime它可以工作,但不知道fromordinal也可用于datetime…在Python标记上不可能击败Martijn.:-)是的,我只在这里呆了几天,但我已经意识到他难以置信的速度和能力。这是我预期的结果。谢谢!在这种情况下,
days=
是可选的。@PauloScardine:显式比隐式好;这样你就不必再次查找默认参数了。这是一个更好的解决方案。谢谢你U
>>> from datetime import datetime, timedelta
>>> t = 734869.00138889
>>> datetime.min + timedelta(days=t - 1)
datetime.datetime(2013, 1, 1, 0, 2, 0, 93)