本文根據Python2的官方文檔展開,鏈接在此。
1. datetime模塊介紹:
有下面幾種類:
datetime.date
就是存的公曆日期,有三個屬性,year,month,day
datetime.time
存的是時間,屬性有hour, minute, second, microsecond, and tzinfo。沒有年月日
datetime.datetime
存的是日期和時間,屬性有year, month, day, hour, minute, second, microsecond, and tzinfo.
datetime.timedelta
存的是日期或時間差,精度是microsecond。正值對應更晚的時間或日期。比如
import datetime
oneDay = datetime.timedelta(days = 1)
!!!注意!!!
timedelta的最大單位是days,所以不要指望能夠加一個月甚至一年!
datetime.tzinfo
是跟time zone相關,在不同時區轉換中有用。
2. 日期操作
對於date objects,有三種方式,鏈接在這裏。這裏就講講我自己常用的:
建立date對象:
可以從date.today()建立當前日期的date對象
也可以直接用date命令直接建立。比如
也可以用datetime.strptime()先建立datetime對象,再用.date()命令將datetime轉換成date。比如
import datetime
today1 = datetime.date.today()
today2 = datetime.date(2019, 4, 20)
today3 = datetime.datetime.strptime('2019-04-20', '%Y-%m-%d')
today4 = today3.date()
date的變換/操作
對已有的date,加減timedelta獲得新的日期。
也可用replace命令,將年、月、日中的一個或多個替換成指定值。
兩個date之間的減法將得到timedelta,對應日期差。
返回成字符串:
date對象可以用.isoformat()命令直接返回'2019-02-28'這樣的string
date對象在如果用print(),或者%s的格式化字符串打出的就是'2019-02-28'這樣的string。
也可用date.strftime(format)命令,返回其他指定格式的日期字符串。
3. datetime和date之間轉換:
datetime轉date只需要用.date()命令,date轉datetime需要補上後面的時間,所以代碼中有一個datetime.datetime.min.time()。如下:
import datetime
# convert date to datetime
todayDate = datetime.date.today()
todayDatetime = datetime.datetime.combine(todayDate, datetime.datetime.min.time())
# convert datetime to date
nowDatetime = datetime.datetime.now()
nowDate = nowDatetime.date()
4. 截取當前時間,計算時間差
這個的典型應用就是記錄程序、模塊、代碼的運行起止時間和耗時,可以用datetime記錄當前時刻,然後用兩個datetime相減,獲得日期和時間差,前面說過了兩個datetime相減的日期和時間差將以timedelta來保存。
datetime.datetime.timedelta有三個屬性:
days:時間差是多少天
seconds:時間差是多少秒
microseconds:時間差是多少微秒
5. 小總結:
# import datetime
# 1. 顯示當前時間
now_datetime = datetime.datetime.now()
print(now_datetime)
2019-04-27 21:45:11.753420
type(now_datetime)
<type 'datetime.datetime'>
# 2. strftime和strptime
# strptime是將字符串轉換成datetime的date或datetime或time類型
# strftime是將datetime的date或datetime或time類型轉換成字符串
# 比如
date1 = datetime.date(2019, 4, 27)
date_str2 = datetime.datetime.strftime(date1, '%Y-%m-%d')
datetime3 = datetime.datetime.strptime(date_str2, '%Y-%m-%d')
date4 = datetime.datetime.strptime(date_str2,'%Y-%m-%d').date()
PS:
1. 注意幾個坑:
timedelta的最大單位是days,所以不能用它直接加一個月或一年。
replace的時候,小心變量不要超出範圍,比如月份大於12或小於1之類的。
2. strftime()和strptime()用到的format:
可以參考這個鏈接。典型的比如:
%y,年份後兩位,%Y年份四位
%m,月份兩位數字
%d,日期兩位數字
%H,小時兩位數字
%M,分鐘兩位數字
%S,秒兩位數字