【python測試開發棧】幫你總結python time模塊高頻使用方法

在平時寫python腳本時,時間是咱們常常用到的數據,好比:時間戳、前端展現的對應格式的時間等,在python中主要有三個和時間處理相關的模塊:timedatetimecalendar,這篇文章主要幫你們整理這三個模塊比較經常使用的方法。前端

熟悉三個概念

GMT

格林威治時間, 十七世紀,格林威治皇家天文臺爲了海上霸權的擴張計畫而進行天體觀測, 觀測所門口牆上有一個標誌24小時的時鐘,顯示當下的時間,對全球而言,這裏所設定的時間是世界時間參考點,全球都以格林威治的時間做爲標準來設定時間 。可是因爲地球在橢圓軌道中運行速度不均勻,GMT時間會有偏差,所以如今已再也不做爲標準時間使用。python

UTC

協調時間時,又稱:世界標準時間,其計算方法更加精確。若是本地時間比UTC時間快,例如中國、蒙古國、新加坡、馬來西亞、菲律賓、澳大利亞西部的時間比UTC快8小時,就會寫做UTC+8,俗稱東8區。相反,若是本地時間比UTC時間慢,例如夏威夷的時間比UTC時間慢10小時,就會寫做UTC-10,俗稱西10區。編程

DST(Daylight Saving Time)

夏令時間,在夏天,天亮的比較早,將時間所有調快一個小時,以達到提前使用日光的目的,從而削減燈光照明和耗電開支。中國也曾經實施過夏令時,可是由於不方便,於1992年暫停了夏令時,不過目前全世界還有幾十個國家在使用夏令時。segmentfault

time

我整理了time的方法,發現其實time模塊總體是圍繞着三種狀態來運轉的,以下圖所示:markdown

WX20200107-125720@2x.png

其中三種狀態對應的數據格式以下:測試

  • 時間戳的格式是:1578373137.54444
  • 時間元祖的格式是:time.struct_time(tm_year=2020, tm_mon=1, tm_mday=7, tm_hour=4, tm_min=58, tm_sec=57, tm_wday=1, tm_yday=7, tm_isdst=0),它其實就是對時間數據格式的描述。
  • 格式化時間:2020-01-07 12:58:57 這個是根據咱們傳入的format格式來轉換的。

經常使用方法

將時間戳轉爲時間元祖

# 獲取時間戳
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")

cpu時間

  • time.perf_counter() 高精度的時間計時器,能夠用來測量短期的值,好比:方法的執行時間。
  • time.process_time() 返回當前進程的系統和用戶CPU時間總和的值(以小數秒爲單位)
  • time.sleep() 暫停執行調用線程達到給定的秒數。須要注意的是:參數能夠是浮點類型,也就是說,時間能夠精確到毫秒級。

datetime

相對於time模塊,datetime模塊更注重對時間和日期的運算,在其內部主要有六個class:code

  • date:用於對日期進行處理,屬性有:年、月、日。
  • time:用於對時間處理,屬性是:時、分、秒、毫秒。
  • datetime:包含了date和time的信息,因此這裏咱們主要介紹datetime對應的方法和操做。
  • timedelta:主要用於對日期進行運算,可生成一個時間誤差。
  • tzinfo:用於對市區描述的抽象基類,通常咱們用不到。
  • timezone:實現了tzinfo。

經常使用方法:

獲取今天的時間

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

  • weekday()方法返回當前時間是一週中的第幾天。默認的星期一是第0天,星期日是第6天。
  • fromordinal()方法是採用格列高利法,在計算時間時,不要忘記考慮閏年的狀況。

時間的比較

這個比較好理解,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

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自動化及編程實踐資料】
相關文章
相關標籤/搜索