我有一堆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对象转换为秒?
当前回答
import datetime
import math
def getSeconds(inputDate):
time = datetime.date.today().strftime('%m/%d/%Y')
date_time = datetime.datetime.strptime(time, '%m/%d/%Y')
msg = inputDate
props = msg.split(".")
a_timedelta = datetime.timedelta
if(len(props)==3):
a_timedelta = date_time - datetime.datetime(int(props[0]),int(props[1]),int(props[2]))
else:
print("Invalid date format")
return
seconds = math.trunc(a_timedelta.total_seconds())
print(seconds)
return seconds
例子getSeconds(“2022.1.1”)
其他回答
从datetime获取UNIX/POSIX时间并将其转换回来:
>>> import datetime, time
>>> dt = datetime.datetime(2011, 10, 21, 0, 0)
>>> s = time.mktime(dt.timetuple())
>>> s
1319148000.0
# and back
>>> datetime.datetime.fromtimestamp(s)
datetime.datetime(2011, 10, 21, 0, 0)
请注意,不同的时区对结果有影响,例如,我当前的TZ/DST返回:
>>> time.mktime(datetime.datetime(1970, 1, 1, 0, 0).timetuple())
-3600 # -1h
因此应该考虑使用UTC版本的函数归一化为UTC。
注意,前面的结果可用于计算当前时区的UTC偏移量。在本例中,这是+1h,即UTC+0100。
引用:
datetime.date.timetuple time.mktime datetime.datetime.fromtimestamp 时间模块的介绍解释了POSIX时间,1970年纪元,UTC, TZ, DST…
我并没有在所有的答案中看到这一点,尽管我猜这是默认的需求:
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文档:
timedelta.total_seconds()
返回持续时间中包含的总秒数。相当于
(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
启用真除法时计算。
注意,对于非常大的时间间隔(在大多数平台上超过270年),这种方法将失去微秒精度。
此功能是2.7版中的新功能。
获取Unix时间(从1970年1月1日开始的秒数):
>>> import datetime, time
>>> t = datetime.datetime(2011, 10, 21, 0, 0)
>>> time.mktime(t.timetuple())
1319148000.0
对于1970年1月1日这个特殊的日子,有多种选择。
对于任何其他开始日期,您需要以秒为单位获得两个日期之间的差异。减去两个日期会得到一个timedelta对象,从Python 2.7开始,它有一个total_seconds()函数。
>>> (t-datetime.datetime(1970,1,1)).total_seconds()
1256083200.0
开始日期通常以UTC为单位指定,因此为了得到正确的结果,您输入到这个公式中的日期时间也应该以UTC为单位。如果datetime还不是UTC,那么在使用它之前需要转换它,或者附加一个具有适当偏移量的tzinfo类。
正如评论中提到的,如果你在datetime上附加了一个tzinfo,那么你也需要在起始日期上添加一个tzinfo,否则减法将失败;对于上面的例子,我将添加tzinfo=pytz。如果使用python2,则使用tzinfo=timezone。如果使用Python 3。