我知道如何在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