Time
datetime 時間魔法
用過 python 中 datetime 模塊的話
都知道可以通過 datetime.now()
或者 datetime.today()
獲取到當(dāng)前系統(tǒng)的年造锅、月膜钓、日噪猾、時怒详、分卖毁、秒
有沒有辦法民晒,能在程序運(yùn)行的時候凡涩,獲取到系統(tǒng)當(dāng)天的任意時刻呢些己?也就是時:分:秒
有兩種方案可以嘗試豌鸡,需要預(yù)熱的知識:
- datetime.datetime.now() or datetiime.datetime.today() -- 獲取系統(tǒng)當(dāng)前時間
- datetime.strftime() -- 轉(zhuǎn)化時間對象為指定格式的字符串
- datetime.strptime() -- 指定格式的字符串轉(zhuǎn)化時間對象
- datetime.timedelta() -- 通過增量跑芳,修改時間對象
一、字符串拼接法
兩行代碼實(shí)現(xiàn)
#!usr/bin/python3
# -*- utf-8 -*-
import datetime
today = datetime.datetime.now().strftime("%Y%m%d") # 20220518
dt_5_30 = datetime.datetime.strptime(today + ' 05:30', "%Y%m%d %H:%M") # 20220518 05:30
dt_23_30 = datetime.datetime.strptime(today + ' 23:30', "%Y%m%d %H:%M") # 20220518 08:30
一起來看看代碼的實(shí)現(xiàn)思路:
- 先通過
datetime.strftime()
方法得到當(dāng)天的年直颅、月博个、日
的格式化字符串; - 然后通過
datetime.strptime()
方法功偿,當(dāng)天的年盆佣、月、日
字符串械荷,拼接上指定的時刻共耍,如:“05:30”。
datetime 的 strptime
方法吨瞎,會將我們指定的時間痹兜,轉(zhuǎn)換為一個datetime
對象
二、“時間滑塊法”
如果把時間想象成一個從左往右的慢慢滑動的滑塊... ...
那么颤诀,我們就可以任意把時間 “撥動” 到任意時刻了不是么字旭?
我們需要借助 timedelta
的 “時間魔法”,把時間撥動一下崖叫,得到我們想要的時間
#!usr/bin/python3
# -*- utf-8 -*-
from datetime import datetime, timedelta
def get_today_hour_minute(H, M, S=0):
""" 可以撥動的 “時間滑塊” 函數(shù)
:param H: int hour 小時
:param M: int minute 小時
:param S: option int 秒數(shù)
:return: 返回當(dāng)天的任意時刻的 datetime 對象
"""
today = datetime.today() # datetime.now() 也可以遗淳,不過精度要求不高時可以用 today
zero_today = today - timedelta(hours=today.hour, minutes=today.minute, seconds=today.second, microseconds=today.microsecond)
set_today = zero_today + timedelta(hours=H, minutes=M, seconds=S)
return set_today
dt_5_30 = get_today_hour_minute(5, 30)
dt_23_30 = get_today_hour_minute(23, 30)
一起來看看代碼的實(shí)現(xiàn)思路,是怎么撥動時間的呢心傀?
- 通過
datetime.today()
得到當(dāng)前的系統(tǒng)時間屈暗; - 借助
timedelta
(表示時間的增量,用絕對值的思維)脂男,讓時間對象today
养叛,減去 “自己”已經(jīng) 走過的時間,使得today
時間 “歸零” 得到zero_today
【20220518000000】宰翅; - 讓后弃甥,再通過
timedelta
,給清零的時間對象today
一個新的增量堕油,通過傳入的參數(shù)H潘飘、M肮之、S
掉缺。也就是,我們自己撥動了表盤的時針戈擒、分針眶明、秒針
在這里,我們也能操控時間了 XD
三筐高、使用場景
用上面的任意一種方法
得到的用于界定時間范圍的datetime
對象
就可以用于當(dāng)天時間數(shù)據(jù)的對比了
舉個小例子:
if datetime.datetime.now() < dt_5_30:
print("當(dāng)前時間小于 05:30")
elif (datetime.datetime.now() >= dt_5_30 and datetime.datetime.now() < dt_23_30):
print("當(dāng)前時間大于等于 05:30搜囱,小于 08:30")
你喜歡哪一種方案呢丑瞧?