Python笔记:日期时间获取与转换
世界時(shí)(Universal Time, UT)是根據(jù)地球自轉(zhuǎn)周期確定的時(shí)間,1s為全年內(nèi)每日平均長度的1/86400,由于地球繞太陽公轉(zhuǎn)的軌道不是圓的,地球與太陽之間的距離不是固定的,導(dǎo)致太陽相對(duì)繞地球的周期不等于地球自轉(zhuǎn)周期,通過對(duì)產(chǎn)生的時(shí)差進(jìn)行修正,稱為“平均太陽時(shí)”。根據(jù)國際協(xié)定,將英國格林威治所在子午圈(又稱本初子午線)的平太陽時(shí),定義為零類世界時(shí)(UT0)。由于地球的旋轉(zhuǎn)軸會(huì)有微小移動(dòng)(每年有幾厘米的移動(dòng)),對(duì)極移效應(yīng)進(jìn)行修正后的時(shí)間稱為為一類世界時(shí)UT1。一類世界時(shí)UT1也有原因不明的季節(jié)性周期變化,對(duì)此進(jìn)行修正,便得到更加均勻的二類世界時(shí)UT2。
原子時(shí)
原子時(shí)鐘是利用銫原子振蕩周期極為規(guī)律的特性研制而出,原子時(shí)(international atomic time,TAI)的秒長定義為銫 -133 原子能級(jí)躍遷輻射9192631770周所持續(xù)的時(shí)間。原子鐘的精度可以達(dá)到每100萬年誤差才1秒。在要求更高時(shí)間精度的天文、航海、航天等領(lǐng)域發(fā)揮了巨大的作用。
世界協(xié)調(diào)時(shí)
世界協(xié)調(diào)時(shí)(Coordinatde Universal Time, UTC)基于國際原子時(shí),以原子時(shí)秒長為基礎(chǔ),在時(shí)刻上盡量接近于格林威治標(biāo)準(zhǔn)時(shí)間(GMT),通過不規(guī)則的加入閏秒來抵消地球自轉(zhuǎn)變慢的影響,保證UTC與世界時(shí)(UT1)相差不超過0.9秒。
epoch time
Unix epoch (Unix time, POSIX time, Unix timestamp),是一種時(shí)間表示方式,定義為從格林威治時(shí)間1970年01月01日00時(shí)00分00秒起至現(xiàn)在的總秒數(shù)。Unix時(shí)間戳不僅被使用在Unix 系統(tǒng)、類Unix系統(tǒng)中,也在許多其他操作系統(tǒng)中被廣泛采用。
2038問題
32位操作系統(tǒng)將epoch日期存儲(chǔ)為有符號(hào)的32位整數(shù),此類系統(tǒng)的Unix時(shí)間戳最多可以使用到格林威治時(shí)間2038年01月19日03時(shí)14分07秒(二進(jìn)制:01111111 11111111 11111111 11111111)。其后一秒,二進(jìn)制數(shù)字會(huì)變?yōu)?0000000 00000000 00000000 00000000,發(fā)生溢出錯(cuò)誤,造成系統(tǒng)將時(shí)間誤解為1901年12月13日20時(shí)45分52秒。這很可能會(huì)引起軟件故障,甚至是系統(tǒng)癱瘓(稱為2038年問題或者Y2038)。
使用64位二進(jìn)制數(shù)字表示時(shí)間的系統(tǒng)(最多可以使用到格林威治時(shí)間292,277,026,596年12月04日15時(shí)30分08秒)則基本不會(huì)遇到這類溢出問題。
python time
時(shí)間格式在線轉(zhuǎn)換: https://www.epochconverter.com/
時(shí)區(qū)轉(zhuǎn)換
國際時(shí)區(qū)轉(zhuǎn)換在線計(jì)算器
世界時(shí)區(qū)劃分時(shí)差查詢
Python time文檔:https://docs.python.org/zh-cn/3/library/time.html
python獲取當(dāng)前時(shí)間
- time.time():獲取當(dāng)前的epoch時(shí)間(時(shí)間戳)
- time.localtime():獲取本地時(shí)間
- time.gmtime():獲取GMT時(shí)間
標(biāo)準(zhǔn)時(shí)間轉(zhuǎn)換為epoch時(shí)間
本文將標(biāo)準(zhǔn)時(shí)間定義為ISO 8601格式時(shí)間:YYYY-MM-DD hh:mm:ss.mil
兩種方法轉(zhuǎn)換為 Unix timestamp:
- calendar.timegm:轉(zhuǎn)換的時(shí)間格式為格林威治標(biāo)準(zhǔn)時(shí)間
- time.mktime:轉(zhuǎn)換的時(shí)間為本地時(shí)間(考慮了時(shí)區(qū))
epoch時(shí)間轉(zhuǎn)換為標(biāo)準(zhǔn)時(shí)間
- time.localtime(epoch_time):轉(zhuǎn)換為本地時(shí)間,或者獲取本地時(shí)間
- time.gmtime(epoch_time):轉(zhuǎn)換為GMT時(shí)間,或者獲取GMT時(shí)間
- datetime.datetime.utcfromtimestamp(epoch_time):UTC時(shí)間
- datetime.datetime.fromtimestamp(epoch_time):本地時(shí)間
python datetime
獲取當(dāng)前時(shí)間(本地時(shí)間)
out:
2020-09-28 14:15:24 Monday 1時(shí)間格式化
import datetime timestr = "2020-10-01 18:30:00" print(datetime.datetime.strptime(timestr, "%Y-%m-%d %H:%M:%S"))out:
2020-10-01 18:30:00timedelta
timedelta表示一個(gè)時(shí)間段,可用于時(shí)間計(jì)算。
語法:
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) import datetime now_time = datetime.datetime.now() # 當(dāng)前時(shí)間加一天 now_time + datetime.timedelta(days=1) # 當(dāng)前時(shí)間減一周 now_time + datetime.timedelta(weeks=-1)總結(jié)
以上是生活随笔為你收集整理的Python笔记:日期时间获取与转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用Python创建自己的加密货币
- 下一篇: Python 基础教程:位运算的奥妙