python 如何用 datetime 獲取當(dāng)天任意時(shí)刻

Time

datetime 時(shí)間魔法

用過(guò) python 中 datetime 模塊的話

都知道可以通過(guò) datetime.now() 或者 datetime.today() 獲取到當(dāng)前系統(tǒng)的年、月、日、時(shí)、分、秒

有沒(méi)有辦法,能在程序運(yùn)行的時(shí)候,獲取到系統(tǒng)當(dāng)天的任意時(shí)刻呢?也就是時(shí):分:秒

有兩種方案可以嘗試,需要預(yù)熱的知識(shí):

  • datetime.datetime.now() or datetiime.datetime.today() -- 獲取系統(tǒng)當(dāng)前時(shí)間
  • datetime.strftime() -- 轉(zhuǎn)化時(shí)間對(duì)象為指定格式的字符串
  • datetime.strptime() -- 指定格式的字符串轉(zhuǎn)化時(shí)間對(duì)象
  • datetime.timedelta() -- 通過(guò)增量,修改時(shí)間對(duì)象

一、字符串拼接法

兩行代碼實(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

一起來(lái)看看代碼的實(shí)現(xiàn)思路:

  1. 先通過(guò) datetime.strftime() 方法得到當(dāng)天的年、月、日的格式化字符串;
  2. 然后通過(guò) datetime.strptime()方法,當(dāng)天的年、月、日字符串,拼接上指定的時(shí)刻,如:“05:30”。

datetime 的 strptime方法,會(huì)將我們指定的時(shí)間,轉(zhuǎn)換為一個(gè)datetime對(duì)象

二、“時(shí)間滑塊法”

如果把時(shí)間想象成一個(gè)從左往右的慢慢滑動(dòng)的滑塊... ...

那么,我們就可以任意把時(shí)間 “撥動(dòng)” 到任意時(shí)刻了不是么?

我們需要借助 timedelta 的 “時(shí)間魔法”,把時(shí)間撥動(dòng)一下,得到我們想要的時(shí)間

#!usr/bin/python3
# -*- utf-8 -*-

from datetime import datetime, timedelta

def get_today_hour_minute(H, M, S=0):
    """ 可以撥動(dòng)的 “時(shí)間滑塊” 函數(shù)
    :param H: int hour 小時(shí)
    :param M: int minute 小時(shí)
    :param S: option int 秒數(shù)
    :return: 返回當(dāng)天的任意時(shí)刻的 datetime 對(duì)象
    """
    today = datetime.today()  # datetime.now() 也可以,不過(guò)精度要求不高時(shí)可以用 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)

一起來(lái)看看代碼的實(shí)現(xiàn)思路,是怎么撥動(dòng)時(shí)間的呢?

  1. 通過(guò) datetime.today() 得到當(dāng)前的系統(tǒng)時(shí)間;
  2. 借助 timedelta(表示時(shí)間的增量,用絕對(duì)值的思維),讓時(shí)間對(duì)象 today ,減去 “自己”已經(jīng) 走過(guò)的時(shí)間,使得today時(shí)間 “歸零” 得到 zero_today【20220518000000】;
  3. 讓后,再通過(guò) timedelta ,給清零的時(shí)間對(duì)象 today 一個(gè)新的增量,通過(guò)傳入的參數(shù) H、M、S。也就是,我們自己撥動(dòng)了表盤(pán)的時(shí)針、分針、秒針

在這里,我們也能操控時(shí)間了 XD

三、使用場(chǎng)景

用上面的任意一種方法
得到的用于界定時(shí)間范圍的datetime對(duì)象
就可以用于當(dāng)天時(shí)間數(shù)據(jù)的對(duì)比了
舉個(gè)小例子:

if datetime.datetime.now() < dt_5_30:
    print("當(dāng)前時(shí)間小于 05:30")
elif (datetime.datetime.now() >= dt_5_30 and datetime.datetime.now() < dt_23_30):
    print("當(dāng)前時(shí)間大于等于 05:30,小于 08:30")

你喜歡哪一種方案呢?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容