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是...