Python中的日期時(shí)間處理詳解
Python中關(guān)于時(shí)間、日期的處理庫有三個(gè):time、datetime和Calendar,其中datetime又有datetime.date、datetime.time、datetime.datetime三個(gè)類。而時(shí)間又可以分為時(shí)間戳、本地時(shí)間和UTC時(shí)間(世界標(biāo)準(zhǔn)時(shí)間)。是不是聽起來有點(diǎn)亂?那么他們相互之間有什么區(qū)別?有什么聯(lián)系?又如何轉(zhuǎn)換呢?
time模塊
在time模塊中,時(shí)間有三種表現(xiàn)形式:
時(shí)間戳,一般指Unix時(shí)間戳,是從1970年開始到現(xiàn)在的秒數(shù)。
本地時(shí)間的struct_time形式:一個(gè)長度為11的命名元組,第一位為年,第二位為月....
UTC時(shí)間的struct_time形式:一個(gè)長度為11的命名元組,類似于上個(gè),只不過為UTC時(shí)間
其中后兩者的類型一致,區(qū)別在于一個(gè)是本地時(shí)間(localtime),一個(gè)是utc時(shí)間。
各種時(shí)間形式的獲取方式:
print("time stamp:", time.time()) # 時(shí)間戳:1479193181.829338 print("local time:", time.localtime()) # struct_time類型的本地時(shí)間 time.struct_time(tm_year=2016, tm_mon=11, tm_mday=15, tm_hour=14, tm_min=59, tm_sec=41, tm_wday=1, tm_yday=320, tm_isdst=0) print("utc time:", time.gmtime()) # struct_time類型的utc時(shí)間 time.struct_time(tm_year=2016, tm_mon=11, tm_mday=15, tm_hour=6, tm_min=59, tm_sec=41, tm_wday=1, tm_yday=320, tm_isdst=0)
這里可以看出,本地時(shí)間(北京時(shí)間)和UTC時(shí)間相差8個(gè)小時(shí)。
各種時(shí)間形式的轉(zhuǎn)換:
time_stamp = time.time() # 時(shí)間戳 local_time = time.localtime(time_stamp)# 時(shí)間戳轉(zhuǎn)struct_time類型的本地時(shí)間 utc_time = time.gmtime(time_stamp) # 時(shí)間戳轉(zhuǎn)struct_time類型的utc時(shí)間 time_stamp_1 = time.mktime(local_time) # struct_time類型的本地時(shí)間轉(zhuǎn)時(shí)間戳 time_stamp_2 = calendar.timegm(utc_time)# struct_time類型的utc時(shí)間轉(zhuǎn)時(shí)間戳 print(time_stamp, time_stamp_1, time_stamp_2)
各種時(shí)間形式和字符串之間的轉(zhuǎn)換:
print(time.ctime(time_stamp)) # 時(shí)間戳轉(zhuǎn)字符串(本地時(shí)間字符串) print(time.asctime(local_time)) # struct_time類型的本地時(shí)間轉(zhuǎn)字符串 print(time.asctime(utc_time)) # struct_time類型的utc時(shí)間轉(zhuǎn)字符串 # struct_time類型的本地時(shí)間轉(zhuǎn)字符串:自定義格式 print(time.strftime("%Y-%m-%d, %H:%M:%S, %w", local_time)) # struct_time類型的utc時(shí)間轉(zhuǎn)字符串:自定義格式 print(time.strftime("%Y-%m-%d, %H:%M:%S, %w", utc_time)) struct_time = time.strptime("2016-11-15, 15:32:12, 2", "%Y-%m-%d, %H:%M:%S, %w") # 字符串轉(zhuǎn)struct_time類型
datetime模塊
接下來再看datetime模塊。該模塊中包含4個(gè)主要的類:
datetime.time:時(shí)間類,只包含時(shí)、分、秒、微秒等時(shí)間信息。
datetime.date:日期類,只包含年、月、日、星期等日期信息。
datetime.datetime:日期時(shí)間類,包含以上兩者的全部信息。
datetime.timedelta:時(shí)間日期差值類,用來表示兩個(gè)datetime之間的差值。
關(guān)于各個(gè)類的基本用法比較簡單,建議看官方文檔:datetime module
這里主要說一下datetime.datetime類的用法,其他兩個(gè)的用法類似,只有輕微差別:
a_datetime_local = datetime.datetime.now() # 獲取datetime.datetime類型的本地時(shí)間 a_datetime_utc = datetime.datetime.utcnow() # 獲取datetime.datetime類型的utc時(shí)間 # datetime.datetime類型轉(zhuǎn)字符串 print(a_datetime_local.strftime("%Y-%m-%d, %H:%M:%S, %w")) # datetime.datetime類型轉(zhuǎn)字符串 print(a_datetime_utc.strftime("%Y-%m-%d, %H:%M:%S, %w")) a_datetime = datetime.datetime.strptime("2016-11-15, 15:32:12, 2", "%Y-%m-%d, %H:%M:%S, %w") # 字符串轉(zhuǎn)
datetime.datetime格式
datetime類型和時(shí)間戳、struct_time類型的相互轉(zhuǎn)換
datetime.datetime和時(shí)間戳、struct_time之間,也能夠相互轉(zhuǎn)換:
time_stamp = a_datetime_local.timestamp() # datetime類型轉(zhuǎn)時(shí)間戳 print(time_stamp) a_datetime_local = datetime.datetime.fromtimestamp(time.time()) # 時(shí)間戳轉(zhuǎn)datetime.datetime類型的本地時(shí)間 a_datetime_utc = datetime.datetime.utcfromtimestamp(time.time()) # 時(shí)間戳轉(zhuǎn)datetime.datetime類型的utc時(shí)間 print(a_datetime_local, a_datetime_utc) print(a_datetime_local.timetuple()) # datetime類型轉(zhuǎn)struct_time類型 print(a_datetime_utc.utctimetuple()) # datetime類型轉(zhuǎn)struct_time類型
本文主要講了各種時(shí)間、日期類型的基本用法,以及他們之間相互轉(zhuǎn)換的方法,以及他們和字符串之間相互轉(zhuǎn)換的方法。
老規(guī)矩,文中代碼已上傳至github:https://github.com/xianhu/LearnPython
本站備份下載地址:http://xz.jb51.net:81/201611/yuanma/LearnPython(jb51.net).zip
相關(guān)文章
Python sqlparse解析SQL表血緣追蹤實(shí)現(xiàn)
這篇文章主要為大家介紹了Python sqlparse解析SQL表血緣追蹤實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Python完整實(shí)現(xiàn)俄羅斯方塊游戲全解
俄羅斯方塊是一個(gè)最初由阿列克謝帕吉特諾夫在蘇聯(lián)設(shè)計(jì)和編程的益智類視頻游戲。本文將利用python實(shí)現(xiàn)這一經(jīng)典的小游戲,需要的可以參考一下2022-03-03Swift中的協(xié)議(protocol)學(xué)習(xí)教程
協(xié)議中可以定義一些基本的需要被實(shí)例化的屬性,這里我們就來看一下Swift中的協(xié)議(protocol)學(xué)習(xí)教程,需要的朋友可以參考下2016-07-07Django Session和Cookie分別實(shí)現(xiàn)記住用戶登錄狀態(tài)操作
這篇文章主要介紹了Django Session和Cookie分別實(shí)現(xiàn)記住用戶登錄狀態(tài)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07python使用selenium模擬瀏覽器進(jìn)入好友QQ空間留言功能
這篇文章主要介紹了python使用selenium模擬瀏覽器進(jìn)入好友QQ空間留言,在本文實(shí)現(xiàn)過程中需要注意的是留言框和發(fā)表按鈕在不同的frame,發(fā)表在外面的一層,具體實(shí)現(xiàn)過程跟隨小編一起看看吧2022-04-04python 實(shí)現(xiàn)關(guān)聯(lián)規(guī)則算法Apriori的示例
這篇文章主要介紹了python 實(shí)現(xiàn)關(guān)聯(lián)規(guī)則算法Apriori的示例,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-09-09python Pexpect 實(shí)現(xiàn)輸密碼 scp 拷貝的方法
今天小編就為大家分享一篇python Pexpect 實(shí)現(xiàn)輸密碼 scp 拷貝的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01控制Python浮點(diǎn)數(shù)輸出位數(shù)的操作方法
在python的輸出結(jié)果中,尤其是浮點(diǎn)數(shù)的輸出,當(dāng)我們需要寫入文本文件時(shí),最好是采用統(tǒng)一的輸出格式,這樣也能夠增強(qiáng)結(jié)果的可讀性,這篇文章主要介紹了控制Python浮點(diǎn)數(shù)輸出位數(shù)的方法,需要的朋友可以參考下2022-04-04