住建局證件查詢系統(tǒng)怎么做關鍵詞優(yōu)化排名
時間戳與日期
在說到這倆模塊之前,首先先明確幾個概念:
- 時間戳是個很單純的東西,沒有“時區(qū)”一說,因為時間戳本質上是經過的時間。
- 日常生活中接觸到的“日期”、“某點某時某分”準確的說是時間點,都是有時區(qū)概念的。
在日常生活中如果說現在幾點但不說明時區(qū)的話就都視為本地時區(qū),這在datetime中也一樣,不額外附上時區(qū)信息的話都視為本地時區(qū)。
time模塊和datetime模塊
在time模塊中比較常用的函數有time.time
、time.gmtime
、time.localtime
、time.mktime
,其中time.gmtime
的“gm”代表的含義是“Greenwich Mean Time(格林尼治平均時間)”,也就是該函數會返回英國時間,也可以理解為UTC-0。我們處在東八區(qū),為UTC+8,如果使用time.gmtime
的話獲取到的時間往往會少8小時,要改用time.localtime
才能獲取到正確的時間。
而datetime模塊比time模塊要稍微復雜那么一些,用文字也不好表達,之后用圖表的方式進行敘述。datetime更加復雜的一大原因是time模塊是 面向函數,而datetime模塊是 面向對象。具體來說就是:
time.struct_time
這個類里頭沒有什么函數可以調用,就像是C語言里的結構體那樣僅存放信息,雖然可以攜帶“時區(qū)”信息但許多模塊對其進行處理時會將其中的時區(qū)信息無視掉(所以經常出現轉換的時間與預期不符的問題);datetime.datetime
則不一樣,這個類里頭有不少的函數/方法,而方法與類對象是強耦合關系,類對象中有無時區(qū)信息都會對方法的執(zhí)行結果造成顯著影響。在官方文檔中有明確提及datetime.datetime
對象有“naive(簡單型)”和“aware(感知型)”這兩種類型,雖然看上去很復雜但實際上也就“有無攜帶時區(qū)信息”的差別罷了:有“時區(qū)信息”的就是aware(感知型),沒有的則是naive(簡單型)??赏ㄟ^獲取datetime.datetime
對象tzinfo
屬性來判斷其是否帶有時區(qū)信息。- 一般情況下
datetime.datetime
對象往往是naive(簡單型),也就是在你不經意的時候你以為它是“UTC”但實際上是“LMT”,例如通過datetime.datetime.utcnow
獲得的datetime對象竟然是不帶時區(qū)的,如果不查官方文檔的話甚至還以為它會帶著時區(qū)信息的,而官方文檔也強調了這一點:[datetime.utcnow]datetime.utcnow()返回的當前 UTC 日期和時間是一個 本機 datetime 對象,哈哈哈哈哈直接氣炸了好吧。(所謂的“本機”也就是本地的意思,說直白點就是datetime.datetime.utcnow
返回的是個naive-datetime
對象); - 補充說明,“
函數(function)
”和“方法(method)
”有著輕微差別,具體點就是“首參有無綁定特定對象”的區(qū)別。這里不展開說明避免跑題,感興趣的可以自己了解下。簡單使用下@staticmethod
和@classmethod
將更直觀地看出函數(function)
和方法(method)
的差異。
圖表說明:
以下為個人總結的圖片表格:
補充:
- 上面說過,
datetime.datetime
類對象可分為“naive(簡單型)”和“aware(感知型)”這兩種東西,也就是一個沒時區(qū)信息(默認本地時區(qū)),一個有時區(qū)信息。
簡單型datetime的tzinfo(時區(qū)信息)為None,而感知型的為datetime.timezone對象。
在有關創(chuàng)建datetime對象的函數中,如果沒有指定時區(qū),返回的datetime對象將全是“簡單型”(如有特例請指正)。 - 有兩種生成時區(qū)對象datetime.timezone的方法:
datetime.timezone(datetime.timedelta(hours=8,minutes=30))
pytz.timezone('Asia/Shanghai')
其中關于pytz.timezone
的可支持時區(qū)(即傳入的參數)可通過pytz.all_timezones
這個列表進行查詢。pytz為系統(tǒng)自帶模塊。 - 以下是能夠生成aware-datetime對象的函數:
datetime.datetime.now
datetime.datetime.fromtimestamp
datetime.datetime.replace
datetime.datetime.astimezone
datetime.datetime.strftime
- 通常使用
datetime.datetime.replace
進行naive-datetime和aware-datetime的相互轉換,例如datetime.datetime.utcnow
返回的是不帶時區(qū)信息的naive-datetime對象,需要調用datetime.datetime.replace
來轉化為aware-datetime對象便于后期處理。
雖然才想起來需要補充代碼,但想想還是算了(編寫樣例代碼好麻煩的說實話),而且本博文的性質更偏向于“文檔說明”而不是“應用舉例”。關于time
模塊和datetime
模塊的具體用法需自行搜索以及測試。
順帶一提,如果出現運行結果與本文描述的不一致,可能是python版本的差異造成的,此時需要參考官方文檔。我的Python版本為3.7.8,(當前Python都已經出到3.11了
參考資料:
- time模塊:(官方文檔)https://docs.python.org/zh-cn/3.7/library/time.html
- datetime模塊:(官方文檔)https://docs.python.org/zh-cn/3.7/library/datetime.html
- 通過pytz獲取指定時區(qū):(博客園)https://www.cnblogs.com/meitian/p/12839164.html
- 通過datetime.timezone獲取簡單時區(qū)(簡單時區(qū)不包含夏令時):(官方文檔)https://docs.python.org/zh-cn/3.7/library/datetime.html#timezone-objects
- Python3中datetime不同時區(qū)轉換介紹與踩坑:(博客園)https://www.cnblogs.com/AcAc-t/p/python3_datetime_timezone.html
未經本人同意不得擅自轉載,本博文發(fā)布于CSDN:(CSDN)https://blog.csdn.net/weixin_44733774/article/details/133475034