我們常常在資料分析或設計特殊功能常常會使用到時間資料的剖析,這邊我們介紹兩個日期時間的相關模組time與datetime。
14.1 time模組
我們在使用time模組中的函數必須匯入此模組,即import time。
time模組可以有兩種的時間格是,一種稱為時間戳,以秒數表示(自1970年1 月1日00:00:00開始算起),一種則是明確表示年月日時分秒的格式,程式語法如下:
特別注意的是,ctime()中如果不放任何參數,則會回傳當前時間與日期格式,若要放入參數t,則t必須是時間戳,回傳結果則是t對應的時間與日期格式。
如果想要分別取得當前時間的年月日時分秒等訊息,則可使用localtime()函數,如果不放任何參數,則會回傳當前時間的時間元組,若要放入參數t,則t必須是時間戳,回傳結果則是t對應的時間元組。時間元組格式如下:
特別要說明的是tm_wday代表一週中的第幾天,tm_yday則代表一年中的第幾天,tm_isdst則代表時間使否有使用夏令時間,1代表有使用,0代表沒有使用,-1則代表不確定。
我們可以利用時間元組的屬性分別得到年月日時分秒等資訊,範例說明如下:
14.2 使用time模組中的strftime()函數自訂時間格式
要自訂時間格式,就必須先定義時間格式,資料類型為字串,以下我們整理幾個常用到字串所代表的時間意義:
strftime()函數需要兩個參數,時間格式與時間元組,結構如下:strftime(時間格式, 時間元組),以下我們舉幾個範例如下:
14.3 使用time模組中的strptime()函數將時間字串轉換成時間元組
strptime()可以將任意時間字串轉換成時間元組,一樣需要兩個參數,一個是時間字串,另一個是時間字串對應的時間格式,結構如下:strftime(時間字串, 時間格式),以下我們舉幾個範例如下:
14.4 牛刀小試-利用time模組進行時間早晚比對與計算時間差
我們的範例中給訂兩個時間字串,我們利用時間戳的大小關係來比較時間早晚,所以必須將時間字串先轉換成時間戳,這時候會使用到一個函數叫做mktime(t),此函數可以回傳時間戳,但參數t必須為時間元組,所以我們必須先將時間字串轉成時間元組,再透過mktime()轉成時間戳。我們提供範例程式碼如下:
我們可以進一步利用相差的時間戳計算兩個時間相差的天數、時數、分數、秒數,我們提供範例程式碼如下:
14.5 利用time模組中的sleep()函數讓系統停止
我們有時候會需要在程式執行過程途中停止數秒在繼續執行,time模組提供了一個sleep(s)函數可以達到這個功能,其中參數s代表要停止的秒數,我們說明範例如下:
14.6 datetime模組
我們亦可以使用datetime模組分別操作時間與日期的相關資訊。我們在使用datetime模組中的函數必須匯入此模組,即import datetime。
若要回傳當前時間與日期或者自訂時間日期,程式寫法如下:
使用dt.datetime()自訂時間日期,參數依序為年、月、日、時、分、秒,即dt.datetime(年,月,日,時,分,秒)。我們可以使用datetime.datetime的屬性分別得到年月日時分秒等資訊,範例說明如下:
14.7 直接利用datetime.datetime的變數進行時間早晚比較與時間差計算
我們可以直接對datetime.datetime的變數進行減法或比大小來判斷時間早晚比較與時間差。範例說明如下:
這邊特別說明一下,day_2-day_1回傳的是 4 days, 10:18:00,它是datetime.timedelta格式,它提供了days屬性可以直接回傳相差的天數,但比較可惜的是沒有hour、min、sec等屬性可以回傳,所以想要知道分別知道時數、分數、秒數,可以先將day_2-day_1轉換成字串,透過擷取子字串的方式得到。
留言
張貼留言