如何获得自 1970 年 1 月 1 日以来 Python 日期时间对象的秒数?
Posted
技术标签:
【中文标题】如何获得自 1970 年 1 月 1 日以来 Python 日期时间对象的秒数?【英文标题】:How do I get seconds since 1/1/1970 of a Python datetime object? 【发布时间】:2019-09-03 14:25:18 【问题描述】:我正在使用 Python 3.7 和 Django。我想获取日期时间对象自 1970 年 1 月 1 日以来的秒数(或毫秒)。按照这里的建议——In Python, how do you convert a `datetime` object to seconds?,我实现了
now = datetime.now()
...
return [len(removed_elts) == 0, score, now.total_seconds()]
但是“now.total_seconds()”行给出了错误
AttributeError: 'datetime.datetime' object has no attribute 'total_seconds'
获取自 1970 年 1 月 1 日以来的秒数的正确方法是什么?
【问题讨论】:
我认为你只是有一个问题,因为你没有减去datetime
对象来得到一个 timedelta
对象(它确实有一个属性 total_seconds
)。我相信您链接的问题上的this answer 可以满足您的需求。但您也可以使用datetime.timestamp
,如下所述。
【参考方案1】:
这应该可行。
import datetime
first_date = datetime.datetime(1970, 01, 01)
time_since = datetime.datetime.now() - first_date
seconds = int(time_since.total_seconds())
【讨论】:
“time_since”和“first_date”是不同的对象类型吗? 它们是 botdatetime
对象。 @戴夫【参考方案2】:
import time
print(time.time())
输出:
1567532027.192546
【讨论】:
【参考方案3】:与您提到的建议相反,您不会在timedelta
对象上调用total_seconds()
,而是在datetime
对象上调用datetime
,它根本没有此属性。
因此,Python 3.7(和 2.7)的一种解决方案可以是:
import datetime
now = datetime.now()
then = datetime.datetime(1970,1,1)
...
return [len(removed_elts) == 0, score, (now - then).total_seconds()]
Python 3.3+ 的另一个更短但不太清晰(至少乍一看)的解决方案(此解决方案归功于 ababak):
import datetime
now = datetime.now()
...
return [len(removed_elts) == 0, score, now.timestamp()]
【讨论】:
【参考方案4】:now = datetime.now()
...
return [len(removed_elts) == 0, score, now.timestamp()]
【讨论】:
【参考方案5】:你可以试试:
import datetime
now = datetime.datetime.now()
delta = (now - datetime.datetime(1970,1,1))
print(delta.total_seconds())
now
的类型为 datetime.datetime
,并且没有 .total_seconds()
方法。
delta
是 datetime.timedelta
类型,并且有一个 .total_seconds()
方法。
希望这会有所帮助。
【讨论】:
以上是关于如何获得自 1970 年 1 月 1 日以来 Python 日期时间对象的秒数?的主要内容,如果未能解决你的问题,请参考以下文章
将 Avro 中存储为整数(自 1970 年 1 月 1 日以来的天数)的“日期”转换为雪花“日期”类型