時間轉換
有時我們拿到的數據會類似這種形式:「2020年09月09號3:25PM」,一個字串,對於我們來說很好理解,一看就知道是什麼時間,但對於電腦來說,其實不然,因此Python有提供函數庫,讓我們在分析時間類別的數據時可以轉換成電腦能理解的型態。常用的函數庫
- import time
- import datetime
複製代碼
那麼time與datetime的差別在哪呢?簡單來說,datetime是time的進階版,它多增加了許多更方便的函數。
名詞介紹
時間戳(timestamp) : 以秒為單位的一個時間類型,起始時間為1970年1月1日0點0分0秒,因此假如現在是1970年1月1日12點0分0秒,所對應到的時間戳會為43200($12\times60\times60$),通常時間戳最常被拿來用作時間的分析,因為它的形式最為簡單,沒有什麼格式需要考量,它的缺點就是有範圍的限制,因為起始值是1970年,那麼1970年前就沒有時間戳了,而且它也有限制最大的年份大約在2262年。
時間元組(struct_time) : 這是一個由九個數值組裝起來的時間類型。如下表所示
位置 | 參數 | 意義 | 範圍 | 0 | tm_year | 西元年 | 四位數 | 1 | tm_mon | 月份 | 1~12 | 2 | tm_day | 日期 | 1~31 | 3 | tm_hour | 小時 | 0~23 | 4 | tm_min | 分鐘 | 0~59 | 5 | tm_sec | 秒數 | 0~59 | 6 | tm_wday | 星期 | 0~6 | 7 | tm_yday | 今年第幾天 | 1~366 | 8 | tm_isdst | 夏令時間 | 0 or 1 or -1 |
- import time # 引入time
- time.localtime() # 查看目前時間元組
複製代碼
時間格式時間格式全部都是使用一個%,加上一個字母來代表,其中大小寫會有不同的意義,這裡舉一寫比較常使用到的引述作為舉例。
引述 | 代表 | 例子 | %a | 星期簡寫 | Mon | %A | 星期 | Monday | %b | 月份簡寫 | Jan | %B | 月份 | January | %d | 日期 | 31 | %H | 小時(24小時制) | 23 | %I | 小時(12小時制) | 12 | %p | AM 或 PM | AM | %P | am 或 pm | am | %m | 月份(十進制) | 01 | %M | 分鐘 | 59 | %S | 秒數 | 59 | %y | 年份(沒有世紀) | 99 | %Y | 年份(有世紀) | 1999 |
時間格式(字串)改成時間戳這種做法是在分析資料中最常用到的作法,因為當資料室字串的時候,我們無法直接使用字串來做運算或比較,最快也做方便的方式就是直接轉成時間戳,讓大家都變成一個數值,再作分析。
舉例 : 將字串"2020-09-09 19:00:00"轉換成時間戳的形式。 實作- import time # 引入time
- timeString = "2020-09-09 19:00:00" # 時間格式為字串
- struct_time = time.strptime(timeString, "%Y-%m-%d %H:%M:%S") # 轉成時間元組
- time_stamp = int(time.mktime(struct_time)) # 轉成時間戳
- print(time_stamp)
複製代碼
時間戳改成時間格式(字串)這個做法最常用在輸出資料的時候,當所有數據處理完,因為通常是用時間戳作分析,但是時間戳的形式,我們不能一眼馬上判斷是何時,所以需要轉化成想要或者規定的字串形式。
舉例 : 將時間戳1599678000轉換成"西元年-月份-日期 小時:分鐘:秒數"的形式。 實作
- import time # 引入time
- time_stamp = 1599678000 # 設定timeStamp
- struct_time = time.localtime(time_stamp) # 轉成時間元組
- timeString = time.strftime("%Y-%m-%d %H:%M:%S", struct_time) # 轉成字串
- print(timeString)
複製代碼 時間格式(字串)更改時間格式的更改一定要透過時間元組的幫忙,先將原本的字串轉成時間元組,在將時間元組轉成新的字串。
舉例 : 將"2020-09-09 19:00:00"轉成"2020 Sep 09 07:00:00 PM" 實作
- import time # 引入time
- timeString = "2020-09-09 19:00:00" # 輸入原始字串
- struct_time = time.strptime(timeString, "%Y-%m-%d %H:%M:%S") # 轉成時間元組
- new_timeString = time.strftime("%Y %b %d %I:%M:%S %p", struct_time)
- print(new_timeString)
複製代碼 取得現在時間取得後可經由轉換成想要的字串,作為其他的用途。 - import time # 引入time
- nowTime = int(time.time()) # 取得現在時間
- struct_time = time.localtime(nowTime) # 轉換成時間元組
- timeString = time.strftime("%Y %m %d %I:%M:%S %P", struct_time) # 將時間元組轉換成想要的字串
- print(timeString)
複製代碼
|