對於日期的操作可以說是比較常見的case了,日期與格式化字串互轉,日期與時間戳互轉,日期的加減操作等,下面主要介紹下常見的需求場景如何實現
1. 基本包引入
主要需要引入時間和日期的處理包,後面的基本操作都是基於此
import datetime
import time
複製程式碼
2. 獲取當前時間
獲取當前時間,有幾種方式,分別使用time和datetime來演示
a. time
獲取當前時間,格式化為字串輸出
now = time.strftime("%Y-%m-%d %H:%M:%S")
print(now)
複製程式碼
獲取當前時間,以時間戳方式輸出,結果為float型別,單位為s
now=time.time()
print(now)
複製程式碼
b. datetime
直接呼叫now()函式獲取當前時間,返回datetime型別物件
now = datetime.datetime.now()
print(now)
複製程式碼
3. 時間戳轉datetime
函式:
datetime.datetime.fromtimestamp()
將時間戳轉換為datetime型別,因為後者可以進行日期的計算(如常見的加減或者格式化)
# 獲取當前的時間戳
now = time.time()
# 將時間差轉換為datetime物件
date = datetime.datetime.fromtimestamp(now)
print(date)
複製程式碼
4. 時間戳轉格式化日期
a. time
函式
time.strftime(format, localtime)
和time.localtime(timestamp)
藉助time的time.strftime
函式來實現轉換,這裡還需要做一個額外的處理,將時間戳轉換為struct_time 物件
now = time.time()
# 首先格式化時間戳為struct_time物件,接著格式化輸出
time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(now))
複製程式碼
b. datetime
函式
datetime.datetime.fromtimestamp
與datetime.datetime.strftime()
藉助前面的知識點即可實現,先將timestamp轉換為datetime, 然後將datetime格式化為字串
now=time.time()
date =datetime.datetime.fromtimestamp(now)
date.strftime('%Y-%m-%d %H:%M:%S')
複製程式碼
5. 字串轉時間戳
函式 strptime(str) 與 time.mktime(struct_time)
前面格式化輸出字串時,主要利用的是strftime
,這裡則主要使用 strptime
now='2019-02-11 18:45:22'
struct_time=time.strptime(now , '%Y-%m-%d %H:%M:%S')
timestamp=time.mktime(struct_time)
複製程式碼
6. 字串轉datetime
函式 datetime.datetime.strptime(str, format)
依然使用strptime
函式來實現轉換
now='2019-02-11 18:45:22'
date=datetime.datetime.strptime(now, '%Y-%m-%d %H:%M:%S')
複製程式碼
7. datetime 轉字串
函式 datetime.datetime.strftime(format)
利用strftime
來實現
now = datetime.datetime.now()
now.strftime('%Y-%m-%d %H:%M:%S')
複製程式碼
8. datetime 轉時間戳
函式 datetime.datetime.timestamp()
結合前面的這個就比較好實現了
now = datetime.datetime.now()
now.timestamp()
複製程式碼
9. datetime轉struct_time
now = datetime.datetime.now()
# 轉換為 struct_time 物件
t=now.timetuple()
# struct_time 輸出時間戳
timestamp=time.mktime(t)
複製程式碼
10. 日期加減操作
函式
datetime.timedelta
日期的加減操作,這裡主要是datetime物件來操作,一個簡單的例子如下
now = datetime.datetime.now()
# 前一小時
d1 = now - datetime.timedelta(hours=1)
print(d1.strftime("%Y-%m-%d %H:%S:%M"))
# 前一天
d2 = now - datetime.timedelta(days=1)
print(d2.strftime("%Y-%m-%d %H:%S:%M"))
# 上週日
d3 = now - datetime.timedelta(days=now.isoweekday())
print(d3.strftime("%Y-%m-%d %H:%S:%M"), " ", d3.isoweekday())
# 上週一
d31 = d3 - datetime.timedelta(days=6)
print(d31.strftime("%Y-%m-%d %H:%S:%M"), " ", d31.isoweekday())
# 上個月最後一天
d4 = now - datetime.timedelta(days=now.day)
print(d3.strftime("%Y-%m-%d %H:%S:%M"))
# 上個月第一天
print(datetime.datetime(d4.year, d4.month, 1))
複製程式碼
11. 格式化符號
%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 # 當前時區的名稱
%% # %號本身
複製程式碼