在平時寫python腳本時,時間是咱們常常用到的數據,好比:時間戳、前端展現的對應格式的時間等,在python中主要有三個和時間處理相關的模塊:time、datetime、calendar,這篇文章主要幫你們整理這三個模塊比較經常使用的方法。前端
格林威治時間, 十七世紀,格林威治皇家天文臺爲了海上霸權的擴張計畫而進行天體觀測, 觀測所門口牆上有一個標誌24小時的時鐘,顯示當下的時間,對全球而言,這裏所設定的時間是世界時間參考點,全球都以格林威治的時間做爲標準來設定時間 。可是因爲地球在橢圓軌道中運行速度不均勻,GMT時間會有偏差,所以如今已再也不做爲標準時間使用。python
協調時間時,又稱:世界標準時間,其計算方法更加精確。若是本地時間比UTC時間快,例如中國、蒙古國、新加坡、馬來西亞、菲律賓、澳大利亞西部的時間比UTC快8小時,就會寫做UTC+8,俗稱東8區。相反,若是本地時間比UTC時間慢,例如夏威夷的時間比UTC時間慢10小時,就會寫做UTC-10,俗稱西10區。編程
夏令時間,在夏天,天亮的比較早,將時間所有調快一個小時,以達到提前使用日光的目的,從而削減燈光照明和耗電開支。中國也曾經實施過夏令時,可是由於不方便,於1992年暫停了夏令時,不過目前全世界還有幾十個國家在使用夏令時。測試
我整理了time的方法,發現其實time模塊總體是圍繞着三種狀態來運轉的,以下圖所示:spa
其中三種狀態對應的數據格式以下:線程
# 獲取時間戳
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小時開始計算的,這是這兩個方法主要的區別。code
# 將時間元祖轉成時間戳
time.mktime(local_time_tuple)複製代碼
# 將時間元祖格式化,
local_time_str = time.strftime("%Y-%m-%d %H:%M:%S", local_time_tuple)
# 能夠將時間元祖轉換爲簡單格式的字符串
time.asctime(local_time_tuple)複製代碼
幫你們整理了比較經常使用的格式,固然,這個不須要記憶,用的時候能夠查文檔,可是經常使用的格式仍是須要掌握的:orm
格式 | 含義 |
註釋 |
---|---|---|
%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:cdn
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)複製代碼
其中須要注意:對象
這個比較好理解,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自動化及編程實踐資料】複製代碼