今天來跟大家討論Python的一種資料類型,叫做datetime。
在處理資料時,我們經常會遇到敘述日期或時間的資料,譬如說:"5/3/2021",或是"2021-5-3"。甚至加上時間的話可能是像這樣:"2021-5-3 16:00:00"。
如果說你今天想要做一些日期的比較或計算,例如說,我想要算"2021-5-3"跟"2021-6-1"差了幾天,該怎麼做呢?我可以像👇這樣算嗎?
"2021-5-3" - "2021-6-1" = ?
單純用string當然是不行...不過不用擔心!Python提供了內建的datetime模組,幫助我們處理這類資料!
透過datetime模組,你可以建立datetime的物件(object),並利用它來做基本的日期時間計算,譬如說:
這裡看到我們利用datetime.datetime(year, month, day)來建立datetime的物件。
不過你可能會問,可是我的日期資料來源是文字型態(string),像是"5/3/2021",我該怎麼用它來創造datetime的物件?
這是一個常見的問題,答案是我們必須知道如何將datetime物件與string之間做互相轉換!
首先,我們來看一下如何把datetime轉成string,這是相對比較單純。假設我想要把一個代表2021年5月3日的datetime物件,轉換成"05/03/2021"這樣一個string:
這裡我們利用strftime這個method,提供你想要的日期格式(此處我們用 "%m%d%Y")來將其轉換成 "05/03/2021"。
反過來,如果你要把"2021-5-31" 這樣一個string轉成datetime物件,一般而言你可以這麼做:
datetime.datetime.strptime這個功能讓你可以將string轉換成datetime物件,但是它需要我們給他正確的日期格式,在這裏你看到"%Y-%m-%d"。
如果你的格式很複雜,比方說你的日期格式長的像這樣:
Wed, 01 Jan 2021 19:00:00
你就必須給他這樣的格式:
如果你的日期格式只有一種就算了,想像如果你的來源可能同時有很多種不同的日期格式,這項工作就變得很令人頭痛了。
有鑑於此,今天跟大家介紹一個很有用的第三方Library,來讓我們更方便處理日期。這個library叫做dateutil
安裝如下:
pip install python-dateutil
dateutil提供很多功能。其中一個非常強大又好用的功能,就是幫你自動轉換string到datetime物件。
這裡我們利用dateutil來試試看我們之前做的事:
上面的code可以直接做到我們之前的轉換!dateutil.parser.parse會自己試著去理解你的日期格式並將其轉換成datetime物件,而且成功率極高!你不需要手動提供格式。即便你的日期格式有不同型態,dateutil.parser.parse大致上都可以幫你轉換。
參考下面的code:
如果你需要做一些較進階的日期計算,譬如說,我想知道下一次的十三號星期五會發生在哪一天,dateutil都可以幫你做到!
dateutil的rrule模組提供我們一個平台來取得我們要的日期,利用類似query language的作法。
處理Python的日期時間類別資料有時候是有點複雜,相關的API可能也沒那麼容易記下來,不過希望透個上述的一些例子可以幫助大家的理解。
以上,跟大家分享Python的datetime的概念以及一些處理小技巧!
Comentarios