如何将Pythondate时间对象转换为秒
道歉为简单的问题…我是新来的Python …我已经search周围,似乎没有任何工作。
我有一堆的date时间对象,我想计算自从过去每一个固定时间(例如自1970年1月1日以来)以来的秒数。
import datetime t = datetime.datetime(2009, 10, 21, 0, 0)
这似乎只是区分具有不同日子的date:
t.toordinal()
任何帮助深表感谢。
1970年1月1日的特殊date有多种select。
对于任何其他开始date,您需要在几秒钟内获得两个date之间的差异。 减去两个date给出了一个timedelta
对象,从Python 2.7开始,它有一个total_seconds()
函数。
>>> (t-datetime.datetime(1970,1,1)).total_seconds() 1256083200.0
开始date通常用UTC来指定,所以为了得到正确的结果,你input这个公式的datetime
也应该是UTC。 如果你的datetime
时间已经不是UTC,你需要在使用之前将其转换,或者附加一个具有正确偏移量的tzinfo
类。
正如在评论中指出的,如果你有一个tzinfo
附加到你的datetime
那么你也需要一个在开始date,否则减法将失败; 对于上面的示例,如果使用Python 2,则添加tzinfo=pytz.utc
如果使用Python 3,则添加tzinfo=timezone.utc
。
获得Unix时间(1970年1月1日以来的秒数):
>>> import datetime, time >>> t = datetime.datetime(2011, 10, 21, 0, 0) >>> time.mktime(t.timetuple()) 1319148000.0
从Python 3.3开始,使用datetime.timestamp()
方法变得非常简单。 这当然只有在你需要从1970年1月1号到UTC的秒数时才有用。
from datetime import datetime dt = datetime.today() # Get timezone naive now seconds = dt.timestamp()
返回值将是一个甚至几分之一秒的浮点数。 如果date时间是天真的(如上面的例子),那么将假定date时间对象表示当地时间,即它将是从你的位置的当前时间到1970-01-01 UTC的秒数。
int (t.strftime("%s"))
也可以
也许脱离主题:从date时间获得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 …
从python文档:
timedelta.total_seconds()
返回持续时间中包含的总秒数。 相当于
(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
计算真正的司启用。
请注意,对于非常大的时间间隔(在大多数平台上大于270年),此方法将失去微秒精度。
这个function在2.7版本中是新的。
我试过标准库的calendar.timegm ,它工作得很好:
# convert a datetime to milliseconds since Epoch def datetime_to_utc_milliseconds(aDateTime): return int(calendar.timegm(aDateTime.timetuple())*1000)
参考: https : //docs.python.org/2/library/calendar.html#calendar.timegm
将表示UTC时间的date时间对象转换为POSIX时间戳 :
from datetime import timezone seconds_since_epoch = utc_time.replace(tzinfo=timezone.utc).timestamp()
将表示本地时区中的时间的date时间对象转换为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只解决scheme可能工作 。
如果您需要<3.3
Python版本的解决scheme,请点击链接。