time模塊可以很好地獲取時間戳(time.time()),並進行格式化處理。但是,如果想要以更方便的格式顯示日期,或者對日期進行加減運算(如獲取167天前是什麼日期,89天后是什麼日期),time模塊就無能爲力了。這個時候就需要用到datetime模塊。
datetime模塊也有自己的datetime數據類型,其值表示一個特定的時刻。如
import datetime # 導入模塊
datetime.datetime.now() # 獲取當前時間
t0 = datetime.datetime(2020,1,1,13,45,34)
t0.year,t0.month,t0.day,t0.hour,t0.minute,t0.second # 年,月,日,時,分,秒
日期間加減運算
datetime模塊中提供了time.delta數據類型,該類型表示一段時間,而非一個具體的時刻,使用可以用於時間段之間的加減。如
delta = datetime.timedelta(days = 89,hours = 10,minutes = 3,seconds = 47)
# 這裏delta表示89天,10小時,3分鐘,47秒的一段時間
dt = datetime.datetime.now() + delta
dt
現在來回答我們開頭提出的兩個問題。
- 167天前是什麼日期
dt = datetime.datetime.now() + datetime.timedelta(days = -167)
dt
- 89天后是什麼日期
dt = datetime.datetime.now() + datetime.timedelta(days = 89)
dt
格式化日期
將datetime類型轉換爲字符串
方法:使用strftime函數
dt = datetime.datetime(2020,2,14,15,3,27)
res = dt.strftime('%Y-%m-%d %H:%M:%S')
# 或者 res = datetime.datetime.strftime(dt,'%Y-%m-%d %H:%M:%S')
print(type(res),res)
將字符串轉換爲datetime類型
方法:使用strptime函數
dtstr = '2020-02-14 15:03:27'
res = datetime.datetime.strptime(dtstr,'%Y-%m-%d %H:%M:%S')
print(type(res),res)
日期格式化符號
%y | 兩位數的年份表示(00-99) |
---|---|
%Y | 四位數的年份表示(000-9999) |
%m | 月份(01-12) |
%d | 月內中的一天(0-31) |
%H | 24小時制小時數(0-23) |
%I | 12小時制小時數(01-12) |
%M | 分鐘數(00-59) |
%S | 秒(00-59) |
%a | 本地簡化星期名稱 |
%A | 本地完整星期名稱 |
%b | 本地簡化的月份名稱 |
%B | 本地完整的月份名稱 |
%c | 本地相應的日期表示和時間表示 |
%j | 年內的一天(001-366) |
%p | 本地A.M.或P.M.的等價符 |
%U | 一年中的星期數(00-53)星期天爲星期的開始 |
%w | 星期(0-6),星期天爲星期的開始 |
%W | 一年中的星期數(00-53)星期一爲星期的開始 |
%x | 本地相應的日期表示 |
%X | 本地相應的時間表示 |
%Z | 當前時區的名稱 |