日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python中生成Epoch的方法

系統(tǒng) 2201 0

在Python2中datetime對(duì)象沒(méi)有timestamp方法,不能很方便的生成epoch,現(xiàn)有方法沒(méi)有處理很容易導(dǎo)致錯(cuò)誤。關(guān)于Epoch可以參見(jiàn)時(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ū)參見(jiàn)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è)參考,也希望大家多多支持腳本之家。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 舞阳县| 肥城市| 阳泉市| 泰兴市| 台东市| 汉中市| 霞浦县| 怀化市| 廉江市| 凌云县| 安远县| 南宫市| 太仆寺旗| 阳曲县| 云林县| 桐梓县| 乌拉特中旗| 通河县| 新兴县| 曲阳县| 樟树市| 城固县| 扎赉特旗| 北海市| 黎平县| 许昌市| 太原市| 万源市| 宜兰县| 德清县| 林周县| 乐陵市| 红河县| 诸暨市| 江阴市| 北流市| 新绛县| 固安县| 忻州市| 桃源县| 德化县|