Python中生成Epoch的方法
在Python2中datetime對(duì)象沒(méi)有timestamp方法,不能很方便的生成epoch,現(xiàn)有方法沒(méi)有處理很容易導(dǎo)致錯(cuò)誤。關(guān)于Epoch可以參見時(shí)區(qū)與Epoch
0 Python中生成Epoch
from datetime import datetime # python3 datetime.now().timestamp() # python2 import time time.mktime(datetime.now().timetuple()) # 為了兼容python2和3,該用法使用更廣泛
1 錯(cuò)誤代碼
from datetime import datetime import pytz aware_date = datetime.utcnow().replace(tzinfo=pytz.utc) time.mktime(aware_date.timetuple()) # bug here
2 原因
Python中的datetime對(duì)象分為帶時(shí)區(qū)信息和不帶時(shí)區(qū)信息的兩種對(duì)象即naive和aware對(duì)象。在處理naive時(shí),一切皆默認(rèn)為系統(tǒng)時(shí)區(qū),沒(méi)有任何問(wèn)題。
在Python3中執(zhí)行timestamp時(shí)對(duì)于naive對(duì)象,按照默認(rèn)時(shí)區(qū)處理(調(diào)用time.mktime),而aware對(duì)象,則帶上時(shí)區(qū)計(jì)算與UTC基準(zhǔn)時(shí)間的間隔秒數(shù)得到,也就是將時(shí)區(qū)信息考慮在內(nèi)。
而Python2和3中的timetuple方法,返回的結(jié)果沒(méi)有包含時(shí)區(qū)信息,也沒(méi)有進(jìn)行時(shí)區(qū)轉(zhuǎn)換。即調(diào)用timetuple對(duì)于aware日期對(duì)象而言,時(shí)區(qū)信息被丟棄,因此再調(diào)用time.mktime將得到一個(gè)錯(cuò)誤的結(jié)果
3 解決辦法
1、方法一:將其他時(shí)區(qū)的aware日期,轉(zhuǎn)換為當(dāng)前系統(tǒng)默認(rèn)的時(shí)區(qū)的aware對(duì)象, 由于與系統(tǒng)時(shí)區(qū)一致,因此該aware對(duì)象與無(wú)時(shí)區(qū)的naive對(duì)象執(zhí)行timetuple的效果一樣。
轉(zhuǎn)換時(shí)區(qū)參見timezone,即調(diào)用astimezone方法,參數(shù)為轉(zhuǎn)換后的時(shí)區(qū)(tzinfo實(shí)例)
由于Python2中缺失tzinfo(抽象基類)的各個(gè)時(shí)區(qū)實(shí)例,需要自己構(gòu)造時(shí)區(qū)對(duì)象。
時(shí)區(qū)實(shí)例可以參考官方文檔的實(shí)現(xiàn)datetime或使用推薦的第三方庫(kù)pytz
2、方法二:計(jì)算時(shí)間差
_EPOCH = datetime(1970, 1, 1, tzinfo=pytz.utc) # 第三方庫(kù) pytz (aware_date - _EPOCH).total_seconds()
以上這篇Python中生成Epoch的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用Python和OpenCV檢測(cè)圖像中的物體并將物體裁剪下來(lái)
這篇文章主要介紹了使用Python和OpenCV檢測(cè)圖像中的物體并將物體裁剪下來(lái),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
Scrapy將數(shù)據(jù)保存到Excel和MySQL中的方法實(shí)現(xiàn)
本文主要介紹了Scrapy將數(shù)據(jù)保存到Excel和MySQL中的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Python pandas庫(kù)中的isnull()詳解
今天小編就為大家分享一篇Python pandas庫(kù)中的isnull()詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
Pytorch 的損失函數(shù)Loss function使用詳解
今天小編就為大家分享一篇Pytorch 的損失函數(shù)Loss function使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01

