我有一堆datetime对象,我想为每个对象计算从过去的固定时间(例如从1970年1月1日以来)开始的秒数。
import datetime
t = datetime.datetime(2009, 10, 21, 0, 0)
这似乎只是区分有不同日期的日期:
t.toordinal()
如何将datetime对象转换为秒?
我有一堆datetime对象,我想为每个对象计算从过去的固定时间(例如从1970年1月1日以来)开始的秒数。
import datetime
t = datetime.datetime(2009, 10, 21, 0, 0)
这似乎只是区分有不同日期的日期:
t.toordinal()
如何将datetime对象转换为秒?
当前回答
从Python 3.3开始,使用datetime.timestamp()方法,这变得超级简单。当然,这只在您需要1970-01-01 UTC的秒数时才有用。
from datetime import datetime
dt = datetime.today() # Get timezone naive now
seconds = dt.timestamp()
返回值将是一个浮点数,表示秒的几分之一。如果datetime是无时区的(如上例所示),则假定datetime对象表示本地时间,即从您所在位置的当前时间到UTC 1970-01-01的秒数。
其他回答
Int (t.strftime("%s"))也可以
从Python 3.3开始,使用datetime.timestamp()方法,这变得超级简单。当然,这只在您需要1970-01-01 UTC的秒数时才有用。
from datetime import datetime
dt = datetime.today() # Get timezone naive now
seconds = dt.timestamp()
返回值将是一个浮点数,表示秒的几分之一。如果datetime是无时区的(如上例所示),则假定datetime对象表示本地时间,即从您所在位置的当前时间到UTC 1970-01-01的秒数。
我并没有在所有的答案中看到这一点,尽管我猜这是默认的需求:
t_start = datetime.now()
sleep(2)
t_end = datetime.now()
duration = t_end - t_start
print(round(duration.total_seconds()))
如果不使用.total_seconds(),则抛出:TypeError: type datetime。Timedelta没有定义__round__方法。
例子:
>>> duration
datetime.timedelta(seconds=53, microseconds=621861)
>>> round(duration.total_seconds())
54
>>> duration.seconds
53
持续时间。Seconds只使用秒,不考虑微秒,就像运行math.floor(duration.total_seconds())一样。
在python 3中,以毫秒为单位计算一个代码块的处理时间的标准方法。X表示:
import datetime
t_start = datetime.datetime.now()
# Here is the python3 code, you want
# to check the processing time of
t_end = datetime.datetime.now()
print("Time taken : ", (t_end - t_start).total_seconds()*1000, " ms")
将表示UTC时间的datetime对象转换为POSIX时间戳:
from datetime import timezone
seconds_since_epoch = utc_time.replace(tzinfo=timezone.utc).timestamp()
将表示本地时区时间的datetime对象转换为POSIX时间戳:
import tzlocal # $ pip install tzlocal
local_timezone = tzlocal.get_localzone()
seconds_since_epoch = local_timezone.localize(local_time, is_dst=None).timestamp()
参见如何在Python中将本地时间转换为UTC ?如果tz数据库在给定平台上可用;只使用stdlib的解决方案可能有效。
如果需要<3.3 Python版本的解决方案,请参考链接。