如何将 Python 日期时间对象的时间部分转换为自一天开始以来的总秒数
Posted
技术标签:
【中文标题】如何将 Python 日期时间对象的时间部分转换为自一天开始以来的总秒数【英文标题】:How to convert the time portion of a Python datetime object to total number of seconds since start of the day 【发布时间】:2015-11-17 22:13:09 【问题描述】:我有一个返回日期时间对象的脚本,如下所示:
rec = record[14] #index 14 is a straight datetime object
rec2 = rec.time() #sends time part to rec2
我现在要做的就是将 rec2 转换为整数类型的秒数。任何有关如何做到这一点的见解将不胜感激。
【问题讨论】:
秒从什么参考点开始?你能告诉我们你的输出吗? @khtad 14:54:02.547277 或 14:54:02。可能是其中之一,具体取决于来源。 你需要“自纪元以来的秒数”格式吗?也不清楚rec.time()
返回什么类型?
***.com/questions/7852855/…
@Dimpermanence 所以你想要 3 或 2,分别?
【参考方案1】:
这个怎么样:
rec2.hour*3600 + rec2.minute*60 + rec2.second
我还发现了这个:
Get seconds since midnight in python
【讨论】:
显然这是一个很好的问题,因为我觉得它很简单:) 我只是想将 datetime 的时间部分转换为秒。这些秒数必须是整数类型,而不是字符串。 Argghh...看,这就是我正在做的,但它看起来...嗯,令人费解。不是你的,我的。因为我有更多的步骤,过了一会儿它就像“来吧,真的吗?” 似乎应该有一个简单的方法给定一个日期来获取自午夜以来的秒数,但我还没有找到比这更好的方法。 好吧,我目前正在使用这个: s = int(sum(int(i) * 60**index for index, i in enumerate(rec2.split(":")[:: -1]))) 并且这可行,但它非常复杂。 其实,这似乎是一个聪明的答案,请发布。【参考方案2】:我早些时候通过采用类似question 的代码“解决”了这个难题,尽管我真的希望有更直接的方法。我拿了@Nolen Royal 的“厚颜无耻”的一个衬里,并将其包裹在 int() 函数中。本质上:
rec = record[14] #stores index 14 of a list to rec which is a full datetime object
rec2 = rec.time() #stores time portion of that datetime object to rec2
rec3 = rec2.strftime('%H:%M:%S') #uses strftime to convert to string
s = int(sum(int(i) * 60**index for index, i in enumerate(rec3.split(":")[::-1]))) #converts that string to integer
令人费解,但它确实有效......不过,如果有人有更好的东西,我会很感兴趣。
【讨论】:
【参考方案3】:The question "Python Time conversion h:m:s to seconds" (that you've linked) 展示了一个简单有效的单行解决方案,说明如何获取自午夜以来的整数秒数,该解决方案适用于 datetime.datetime
和 datetime.time
类型:
from datetime import timedelta
secs = timedelta(hours=rec.hour, minutes=rec.minute, seconds=rec.second).seconds
【讨论】:
以上是关于如何将 Python 日期时间对象的时间部分转换为自一天开始以来的总秒数的主要内容,如果未能解决你的问题,请参考以下文章
python - 如何在没有dateutil的情况下将时区感知字符串转换为Python中的日期时间?
如何在 Python 中将日期时间对象转换为自纪元(unix 时间)以来的毫秒数?