1

假设我有这个时间戳:

In [146]: t
Out[146]: datetime.time(11, 2, 5, 110521)

如何将其转换为自午夜以来的秒数?一种方法是首先将其转换为timedelta

In [147]: datetime.timedelta(hours=t.hour, minutes=t.minute, seconds=t.second, microseconds=t.microsecond)
Out[147]: datetime.timedelta(0, 39725, 110521)

那我就可以拿了total_seconds()。但这似乎真的很啰嗦。有没有更 Pythonic 的方式?

4

1 回答 1

2

hour只需将和minute属性相乘,然后将属性相除,microsecond然后将其全部相加:

>>> (t.hour * 3600) + (t.minute * 60) + t.second + (t.microsecond / 1000000.0)
39725.110521

不幸的是,您不能使用datetime.time.min,因为datetime.time对象不支持减法。

可以datetime.datetime通过组合时间加datetime.date.min(支持的最早日期)然后减去(支持的最早日期和时间)来生成一个对象datetime.datetime.min,但这也很冗长:

>>> datetime.datetime.combine(datetime.date.min, t) - datetime.datetime.min
datetime.timedelta(0, 39725, 110521)
>>> (datetime.datetime.combine(datetime.date.min, t) - datetime.datetime.min).total_seconds
39725.110521
于 2014-02-10T17:51:25.970 回答