python對日期時間處理

2021-09-24 00:00:21 字數 3556 閱讀 2997

python處理時間的模組有三個:datetime,time,calendar;datetime模組主要是用來表示日期的,就是我們常說的年月日時分秒,calendar模組主要是用來表示年月日,是星期幾之類的資訊,time模組主要側重點在時分秒,粗略從功能來看,

我們可以認為三者是乙個互補的關係,各自專注一塊。

1,time模組

1.1 時間的獲取、表示、轉換

time模組獲取時間的基本方法:tt = time.time() # 1559201353.5570097

得到的是時間戳,即2023年1月1日0點(時間基準點epoch)到現在的秒數(浮點數),用的是utc時間。

1.2 將時間戳轉換為年月日時分秒格式

有兩個轉換方式,乙個是utc時間,乙個是所在時區進行調整後的時間,得到的是struct_time

time.gmtime(tt)

st = time.localtime(tt)

#utc時間輸出:time.struct_time(tm_year=2019, tm_mon=5, tm_mday=30, tm_hour=7, tm_min=29, tm_sec=13, tm_wday=3, tm_yday=150, tm_isdst=0)

#當地時間輸出:time.struct_time(tm_year=2019, tm_mon=5, tm_mday=30, tm_hour=15, tm_min=29, tm_sec=13, tm_wday=3, tm_yday=150, tm_isdst=0)

1.3 將struct_time轉換為秒數

calendar.timegm()方法用來把utc的struct_time(gmtime的返回物件)轉為從epoch開始的秒數

time.mktime()用來把用時區調整過的struct_time(即localtime的返回物件)物件轉為從epoch開始的秒數

1.4 在時間和表示時間的字串之間進行轉換

time模組中的strftime和strptime就是做這個用的。

看名字大家就應該知道它們的含義,

strftime 即 string format time,用來將時間格式化成字串;

strptime 即string parse time,用來將字串解析成時間。需要注意的是,這裡的時間都是struct_time物件。

ss = time.strftime(』%y/%m/%d %h:%m:%s』,st)

r# 19/05/30 15:29:13

time.strptime(ss,』%y/%m/%d %h:%m:%s』)

r# time.struct_time(tm_year=2019, tm_mon=5, tm_mday=30, tm_hour=15, tm_min=29, tm_sec=13, tm_wday=3, tm_yday=150, tm_isdst=-1)

1.5 簡單轉換方式

asctime用來將乙個struct_time物件轉為標準24字元的字串,如下所示:sun jun 20 23:21:05 1993;

ctime方法與asctime作用相同,只不過它接收的是秒數,在內部,會先把秒數通過localtime轉為struct_time,再往後就與asctime一樣了。

time.asctime(st)

time.ctime(tt)

r# thu may 30 15:29:13 2019

2, datetime模組

簡單說,該模組核心的類就三個,date類表示年月日,time類表示時分秒毫秒,這裡不要和time模組搞混淆了。

2.1 建立datetime物件

dt=datetime.datetime.fromtimestamp(time.time())

以上,time.time()獲得自epoch開始的秒數,fromtimestamp方法會將這個秒數轉變成乙個datetime物件。

這個datetime物件究竟是utc的還是local的?

答案是local的,這是該方法的預設行為。如果你在fromtimestamp方法中傳入乙個表示時區的引數,即tzinfo物件,就會按傳入的時區資訊進行轉換。

獲得表示當前local時間的datetime物件,還有兩個簡便方法:

datetime. datetime. now()

datetime. datetime. today()

以上我們得到的都是local的datetime物件,如何獲得utc的datetime物件呢?

有兩個辦法:

datetime.datetime.utcfromtimestamp(time.time())

r# 2019-05-30 16:29:47.819607

datetime.datetime.utcnow()

2.2 從字串中建立datetime物件

方法為datetime.striptime(date_string, format)

其內部還是先呼叫的time模組中的striptime方法,獲取struct_time物件,再利用struct_time物件中的年月日時分秒資訊構建datetime物件。

同樣的,datetime類也提供了strftime(),asctime(),ctime()方法,相信不說你也知道是做什麼的了。

datetime類還提供了乙個combine方法,用來將乙個date物件和乙個time物件組合成乙個datetime物件。

需要注意的是,datetime模組**現timestamp時,一般可將其理解成time.time()返回的秒數

2.3 date和time的建立

date物件的建立和datetime非常相似,

datetime.date.today()

datetime.date.fromtimestamp()都可以建立乙個date物件。

當然,你也可以通過構造方法傳入年月日來建立date物件。

相比之下,time物件的建立就很有限,只能通過datetime.time([hour[, minute[, second[, microsecond[, tzinfo]]]]])這個方法建立

3,時間的加減

python中可以方便地對date物件之間,或者datetime物件之間進行小於(<)比較和減法(-)操作。

注意,這裡僅限於同類物件之間,而且,不包括time物件之間。

兩個date物件作減,或者兩個datetime物件之間作減,差值用乙個timedelta物件表示。

dt = datetime.datetime.fromtimestamp(time.time())

dt1 = dt - datetime.timedelta(seconds=10)

r# 2019-05-30 16:45:23.642651

r# 2019-05-30 16:45:13.642651

4,pandas中對時間的處理

資料處理中經常遇到時間的處理,pandas也有相應的模組。

將string轉換為時間格式:pd.to_datetime(strtime)

su = pd.to_datetime(『2019-05-29 16:45:23』)

r# 2019-05-29 16:45:23

提取日期等資訊

df[『begintime』].dt.hour()

python 日期處理 python 日期時間處理

獲取日期 import datetime 呼叫事件模組 today datetime.date.today 獲取今天日期 deltadays datetime.timedelta days 1 確定日期差額,如前天 days 2 yesterday today deltadays 獲取差額日期,昨天...

MySQL對日期時間型別的處理和限制

如果表示時間值的date和時間型別為datetime date timestamp time和year。每個時間型別有乙個有效值範圍和乙個 零 值,當指定不合法的mysql不能表示的值時使用 零 值。如果試圖插入乙個不合法的日期,mysql將給出警告或錯誤。可以使用allow invalid dat...

Python 日期時間處理

所有日期 時間的api都在datetime模組內。1.日期輸出格式化 datetime string import datetime now datetime.datetime.now now.strftime y m d h m s 輸出 2015 04 07 19 11 21 strftime是...