大家好,我是米洛,一個想和大家一起分享
測試開發(fā)相關(guān)的技術(shù),面試經(jīng)驗和成長經(jīng)歷的博主!
歡迎大家關(guān)注我的龔仲耗: 測試開發(fā)坑貨。
很多人都用過datetime庫,也能很順利地寫出datetime.now()和對應(yīng)的格式化代碼:
from datetime import datetime
print(datetime.now())
print(datetime.strftime("%Y-%m-%d %H:%M:%S"))
但其實datetime還有一些你可能不知道的用法。
故事
在我們做數(shù)據(jù)統(tǒng)計的時候,會遇到這樣的場景。比如獲取本月至今的測試用例執(zhí)行次數(shù),我們需要獲取到類似2021-07-01 00:00:00的字符串。
或者這么說,我曾經(jīng)出過這樣一道筆試題:
獲取當(dāng)月的第一天的日期字符串,如果今天是2021年4月10日,那么輸出"2021-04-01 00:00:00"。
先想一下,如果是你,你會怎么做?雖然我不知道大家是否都能掌握對應(yīng)的技巧,我還是盡自己的力量寫出最可能的解法。
- 解法一(尷尬型)
from datetime import datetime
result = datetime.now().strftime("%Y-%m-%d")
day = result.split(" ")[0].split("-")[2]
result = result.replace(day, "01") + " 00:00:00"
print(result)
這種解法是從字符串的角度出發(fā),去解決問題,比較憨厚,是我最初的模樣。
- 解法二
from datetime import datetime
now = datetime.now()
now = now.replace(now.year, now.month, 1, 0, 0, 0)
result = now.strftime("%Y-%m-%d %H:%M:%S")
print(result)
時間是可以設(shè)置的,我這里把day設(shè)置為1,時分秒設(shè)置為0,再格式化就成功了。
-
解法三
但其實,因為不確定大家知不道,所以壓軸出場了,日期格式化的時候是可以指定的。
from datetime import datetime
print(datetime.now().strftime("%Y-%m-01 00:00:00"))

其實datetime還有很多玩法,我們?nèi)绻僮魅掌诘脑?code>盡量不要使用字符串,我們要用datetime類的相關(guān)方法,簡單方便快捷。
進階
如果要操作時間加減,比如我要獲取30天后的今天,或者算出距離高考已經(jīng)過去多久了,都可以用datetime來解決。
假如我是6.1入職的公司,我想看看我來了多久了,我可以這么寫:
from datetime import timedelta, datetime
come = datetime.strptime("2021-06-01", "%Y-%m-%d")
# 計算日期差, 獲取入職后的天數(shù)
days = (datetime.now() - come).days
print(days)
# 計算3個月后的時間,算出轉(zhuǎn)正日期
engineer = come + timedelta(days=90)
print(engineer.strftime("%Y-%m-%d"))
可以看到datetime是可以做加減法的,加減后的對象是timedelta對象,這也是我之前強調(diào)不要用字符串操作的原因。
小調(diào)查
如果覺得技巧有用,學(xué)到了的話,請麻煩點個贊吧,贊多我就繼續(xù)更新,贊少我就不更新類似的。