在平時寫python腳本時,時間是咱們常常用到的數據,好比:時間戳、前端展現的對應格式的時間等,在python中主要有三個和時間處理相關的模塊:time、datetime、calendar,這篇文章主要幫你們整理這三個模塊比較經常使用的方法。前端
格林威治時間, 十七世紀,格林威治皇家天文臺爲了海上霸權的擴張計畫而進行天體觀測, 觀測所門口牆上有一個標誌24小時的時鐘,顯示當下的時間,對全球而言,這裏所設定的時間是世界時間參考點,全球都以格林威治的時間做爲標準來設定時間 。可是因爲地球在橢圓軌道中運行速度不均勻,GMT時間會有偏差,所以如今已再也不做爲標準時間使用。python
協調時間時,又稱:世界標準時間,其計算方法更加精確。若是本地時間比UTC時間快,例如中國、蒙古國、新加坡、馬來西亞、菲律賓、澳大利亞西部的時間比UTC快8小時,就會寫做UTC+8,俗稱東8區。相反,若是本地時間比UTC時間慢,例如夏威夷的時間比UTC時間慢10小時,就會寫做UTC-10,俗稱西10區。編程
夏令時間,在夏天,天亮的比較早,將時間所有調快一個小時,以達到提前使用日光的目的,從而削減燈光照明和耗電開支。中國也曾經實施過夏令時,可是由於不方便,於1992年暫停了夏令時,不過目前全世界還有幾十個國家在使用夏令時。segmentfault
我整理了time的方法,發現其實time模塊總體是圍繞着三種狀態來運轉的,以下圖所示:markdown
其中三種狀態對應的數據格式以下:測試
# 獲取時間戳 time_stamp = time.time() print(time_stamp) # 將時間戳轉爲時間元祖,從1970年1月1日 0點0分計算 print(time.gmtime(time_stamp)) # 將時間戳轉爲時間元祖 ,本地時間,若是在中國就是從1970年1月1日 8點0分計算 local_time_tuple = time.localtime(time_stamp) print(local_time_tuple)
這裏須要注意:time.gmtime()是從UTC時間開始計算的,而time.localtime()是從當地時間開始計算的,好比:在中國是從UTC+8小時開始計算的,這是這兩個方法主要的區別。spa
# 將時間元祖轉成時間戳 time.mktime(local_time_tuple)
# 將時間元祖格式化, local_time_str = time.strftime("%Y-%m-%d %H:%M:%S", local_time_tuple) # 能夠將時間元祖轉換爲簡單格式的字符串 time.asctime(local_time_tuple)
幫你們整理了比較經常使用的格式,固然,這個不須要記憶,用的時候能夠查文檔,可是經常使用的格式仍是須要掌握的:線程
格式 | 含義 | 註釋 |
---|---|---|
%Y | 十進制數表示的帶世紀的年份 | |
%y | 十進制數 [00,99] 表示的沒有世紀的年份 | |
%m | 十進制數 [01,12] 表示的月 | |
%d | 十進制數 [01,31] 表示的月中日 | |
%H | 十進制數 [00,23] 表示的小時(24小時制) | |
%I | 十進制數 [01,12] 表示的小時(12小時制) | |
%M | 十進制數 [00,59] 表示的分鐘 | |
%S | 十進制數 [00,61] 表示的秒 | |
%W | 十進制數 [00,53] 表示的一年中的週數(星期一做爲一週的第一天)做爲。在第一個星期一以前的新年中的全部日子被認爲是在第0周。 | |
%U | 十進制數 [00,53] 表示的一年中的週數(星期日做爲一週的第一天)做爲。在第一個星期日以前的新年中的全部日子都被認爲是在第0周 | |
%w | 十進制數 [0(星期日),6] 表示的週中日 | |
%p | 本地化的 AM 或 PM | |
%Z | 時區名稱(若是不存在時區,則不包含字符) |
# 將時間格式轉換爲時間元祖 time.strptime(local_time_str, "%Y-%m-%d %H:%M:%S")
相對於time模塊,datetime模塊更注重對時間和日期的運算,在其內部主要有六個class:code
test_dt = datetime.datetime.today() print(test_dt) print(test_dt.time()) print(test_dt.date()) print(test_dt.ctime()) print(test_dt.weekday()) print(test_dt.year) # 從時間戳加載時間 test_dt_stamp = datetime.datetime.fromtimestamp(time.time()) print(test_dt_stamp) # 從格列高利曆序號加載時間,其中公元 1 年 1 月 1 日的序號爲 1, # 每增長一天,對應的值就增長1,好比公元1年1月2日的序號是2。 test_dt_dinal = datetime.datetime.fromordinal(1) print(test_dt_dinal)
其中須要注意:orm
這個比較好理解,datetime中的對象是能夠直接被比較的,不過大多數狀況下,好比:
# 由兩個時間戳獲取datetime時間,從而比較他們的大小 test_stmap1 = datetime.datetime.fromtimestamp(time.time() - 4000000) test_stmap2 = datetime.datetime.fromtimestamp(time.time()) if test_stmap2 > test_stmap1: print("test_stmap2 is bigger")
這主要是用到了咱們前面提到了類:timedelta,它能夠表示一個時間差值,好比:幾天、幾小時、甚至幾周。而後咱們能夠找個時間基準來進行時間計算。好比,下面的例子,計算了昨天、今天、明天的時間:
# 計算昨天、今天、明天的時間 test_today = datetime.datetime.today() print("today:", test_today) one_day = datetime.timedelta(days=1) yesterday = test_today - one_day tomorrow = test_today + one_day print("yesterday:", yesterday) print("tomorrow:", tomorrow)
初次以外,timedelta還支持浮點型數字的運算:
# 浮點型運算 one_day = datetime.timedelta(days=1, hours=1) one_point_five_day = one_day * 1.5 print(one_point_five_day)
這裏須要注意的是:timedelta能夠有多個參數,好比datetime.timedelta(days=1, hours=1, seconds=20)。那麼和1.5相乘,每一個參數都會和1.5相乘,好比上面例子的運行結果是:1 day, 13:30:00。
calendar類主要用於對日曆的操做,我這裏爲你們整理了它比較經常使用的方法,掌握這些方法,夠你在工做中使用了。
# 打印一年的日曆 calen = calendar.calendar(2020) print(calen) # 打印一個月的日曆 calen = calendar.month(2020,1) print(calen) # 打印的結果以下: January 2020 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
看着是否是挺炫的,僅用一行代碼就能打印日曆。
# 獲取指定的年月日是星期幾。 calendar.weekday(2020, 1, 7) # 根據指定日期獲取時間信息,返回兩個值,第一個值表示1號是星期幾,第二個值是這個月有多少天 calendar.monthrange(2019, 1)
# 檢測某一年是不是閏年 calendar.isleap(2019) # 檢測指定年限內閏年的數量 calendar.leapdays(2008, 2020)
python的時間處理模塊,能夠方便的幫你對時間進行處理,文中列出來比較高頻使用的方法,固然你們若是感興趣,徹底能夠去官方文檔上翻看其餘的方法(從前一段時間開始,python提供了中文的文檔)。
關注【公衆號:軟件測試佈道師】,回覆【python】,便可獲取【python自動化及編程實踐資料】