我知道如何在C和Java中执行此操作,但我不知道快速转换年/月/日/小时/分/秒到自1970年1月1日以来的秒数。python:自1970年1月1日起,将年/月/日/小时/分/秒转换为#秒
有人可以帮助我吗?
到目前为止,我已经想出了如何创建一个datetime
object,但我似乎无法得到从历元开始经过的#秒。
(编辑:我的问题是这等一个逆:Python: Seconds since epoch to relative date)
我知道如何在C和Java中执行此操作,但我不知道快速转换年/月/日/小时/分/秒到自1970年1月1日以来的秒数。python:自1970年1月1日起,将年/月/日/小时/分/秒转换为#秒
有人可以帮助我吗?
到目前为止,我已经想出了如何创建一个datetime
object,但我似乎无法得到从历元开始经过的#秒。
(编辑:我的问题是这等一个逆:Python: Seconds since epoch to relative date)
使用timetuple
或utctimetuple
方法获取时间数组和使用它转换成时间戳time.mktime
>>> import datetime
>>> dt = datetime.datetime(2011, 12, 13, 10, 23)
>>> import time
>>> time.mktime(dt.timetuple())
1323793380.0
有一个很好的错误相关http://bugs.python.org/issue2736,这是有趣的阅读和任何人试图转换为时间戳应阅读此。根据该线程正确的方法是
timestamp = (dt - datetime(1970, 1, 1))/timedelta(seconds=1)
您可以使用datetime.datetime(1970, 1, 1)
作为参考,从datetime.timedelta
对象获得秒的总金额如下:
from datetime import datetime
delta = your_date - datetime(1970, 1, 1)
delta.total_seconds()
它假定'your_date'是UTC日期。 – jfs
import calendar
calendar.timegm(datetime_object.utctimetuple())
如果'datetime_object'没有附加时区信息,'utctimetuple()'会自动失败,除非'datetime_object'已经代表UTC时间。 – jfs
为DateTime对象(破停机时间:年/月/日/时/分/秒)转换为seconds since the Epoch (POSIX time):
seconds_since_epoch = datetime_object.timestamp()
注:POSIX Epoch is "00:00:00 GMT, January 1, 1970"。
如果datetime_object
没有时区信息,则.timestamp()
方法使用本地时区。
datetime.timestamp()
method是在Python 3.3中引入的;对于适用于较旧Python版本的代码,请参阅Converting datetime.date to UTC timestamp in Python。
'mktime()'只在'dt'是当地时间时才起作用。 “正确的方式”只适用于'dt'是一个天真的日期时间对象,它表示UTC的时间(如果'dt'是本地时间,则是错误的)。请参阅[在Python中将datetime.date转换为UTC时间戳](http://stackoverflow.com/a/8778548/4279)。 – jfs