将当前日期时间与包括分钟在内的一天中的时间进行比较
Compare current datetime to time of day that includes minutes
将当前日期时间与一天中包含分钟的时间进行比较的最佳方法是什么。我目前的方法似乎不是最简洁的。我想在6:30PM.
之后执行一条语句
from datetime import datetime as dt
if (dt.now().hour == 18 and dt.now().minute > 30) or dt.now().hour >= 19:
print('hello world')
如果我想在 6:30PM 之后和 9:30PM 之前做,它会变得更加混乱。
我会这样做:
from datetime import datetime
def check_time(date, hour, minute):
if date > date.replace(hour=hour, minute=minute):
print('its more than ' + str(hour) + ':' + str(minute))
else:
print('its less than ' + str(hour) + ':' + str(minute))
today = datetime.now()
check_time(today, 18, 30)
您可以使用我为我的一个项目构建的这个功能。我在天、小时、分钟、秒级构建了这个功能。我已根据您的需要进行了缩减。
def compare_hours(constraint: dict) -> bool:
from datetime import datetime
"""
This is used to compare a given hours,minutes against current time
The constraint must contain a single key and value.
Accepted keys are:
1. before:
eg {"before": "17:30"}
2. after:
eg: {"after": "17:30"}
3. between:
eg: {"between": "17:30, 18:30"}
4. equal:
eg: {"equal": "15:30"}
Parameters
----------
constraint : dict
A dictionary with keys like before, after, between and equal with their corresponding values.
Returns
-------
True if constraint matches else False
"""
accepted_keys = ("before", "after", "between", "equal")
assert isinstance(constraint, dict), "Constraint must be a dict object"
assert len(constraint.keys()) == 1, "Constraint contains 0 or more than 1 keys, only 1 is allowed"
assert list(constraint.keys())[0] in accepted_keys, f"Invalid key provided. Accepted keys are {accepted_keys}"
key = list(constraint.keys())[0]
time_split = lambda x: list(map(int, x.split(":")))
try:
if key == "before":
hours, minutes = time_split(constraint.get(key))
dt = datetime.now()
if dt < dt.replace(hour=hours, minute=minutes):
return True
return False
elif key == "after":
hours, minutes = time_split(constraint.get(key))
dt = datetime.now()
if dt > dt.replace(hour=hours, minute=minutes):
return True
return False
elif key == "between":
dt = datetime.now()
values = constraint.get(key).replace(' ', '').split(",")
assert len(values) == 2, "Invalid set of constraints given for between comparison"
hours, minutes = time_split(values[0])
dt1 = dt.replace(hour=hours, minute=minutes)
hours, minutes = time_split(values[1])
dt2 = dt.replace(hour=hours, minute=minutes)
assert dt2 > dt1, "The 1st item in between must be smaller than second item"
if dt > dt1 and dt < dt2:
return True
return False
else:
hours, minutes = time_split(constraint.get(key))
dt = datetime.now()
if dt == dt.replace(hour=hours, minute=minutes):
return True
return False
except Exception as e:
print(e)
您可以根据需要重复使用该功能。例如:
if compare_hours({"before": "21:00"}) and compre_hours({"after": "18:30"}):
"do something"
这与使用“介于”选项基本相同。
您可以简单地从您的 datetime
对象中提取一个 time
对象并进行直接比较。
>>> from datetime import time, datetime as dt
>>> dt.now()
datetime.datetime(2022, 3, 8, 15, 0, 56, 393436)
>>> dt.now().time() > time(14, 30)
True
>>> dt.now().time() > time(15, 30)
False
将当前日期时间与一天中包含分钟的时间进行比较的最佳方法是什么。我目前的方法似乎不是最简洁的。我想在6:30PM.
之后执行一条语句from datetime import datetime as dt
if (dt.now().hour == 18 and dt.now().minute > 30) or dt.now().hour >= 19:
print('hello world')
如果我想在 6:30PM 之后和 9:30PM 之前做,它会变得更加混乱。
我会这样做:
from datetime import datetime
def check_time(date, hour, minute):
if date > date.replace(hour=hour, minute=minute):
print('its more than ' + str(hour) + ':' + str(minute))
else:
print('its less than ' + str(hour) + ':' + str(minute))
today = datetime.now()
check_time(today, 18, 30)
您可以使用我为我的一个项目构建的这个功能。我在天、小时、分钟、秒级构建了这个功能。我已根据您的需要进行了缩减。
def compare_hours(constraint: dict) -> bool:
from datetime import datetime
"""
This is used to compare a given hours,minutes against current time
The constraint must contain a single key and value.
Accepted keys are:
1. before:
eg {"before": "17:30"}
2. after:
eg: {"after": "17:30"}
3. between:
eg: {"between": "17:30, 18:30"}
4. equal:
eg: {"equal": "15:30"}
Parameters
----------
constraint : dict
A dictionary with keys like before, after, between and equal with their corresponding values.
Returns
-------
True if constraint matches else False
"""
accepted_keys = ("before", "after", "between", "equal")
assert isinstance(constraint, dict), "Constraint must be a dict object"
assert len(constraint.keys()) == 1, "Constraint contains 0 or more than 1 keys, only 1 is allowed"
assert list(constraint.keys())[0] in accepted_keys, f"Invalid key provided. Accepted keys are {accepted_keys}"
key = list(constraint.keys())[0]
time_split = lambda x: list(map(int, x.split(":")))
try:
if key == "before":
hours, minutes = time_split(constraint.get(key))
dt = datetime.now()
if dt < dt.replace(hour=hours, minute=minutes):
return True
return False
elif key == "after":
hours, minutes = time_split(constraint.get(key))
dt = datetime.now()
if dt > dt.replace(hour=hours, minute=minutes):
return True
return False
elif key == "between":
dt = datetime.now()
values = constraint.get(key).replace(' ', '').split(",")
assert len(values) == 2, "Invalid set of constraints given for between comparison"
hours, minutes = time_split(values[0])
dt1 = dt.replace(hour=hours, minute=minutes)
hours, minutes = time_split(values[1])
dt2 = dt.replace(hour=hours, minute=minutes)
assert dt2 > dt1, "The 1st item in between must be smaller than second item"
if dt > dt1 and dt < dt2:
return True
return False
else:
hours, minutes = time_split(constraint.get(key))
dt = datetime.now()
if dt == dt.replace(hour=hours, minute=minutes):
return True
return False
except Exception as e:
print(e)
您可以根据需要重复使用该功能。例如:
if compare_hours({"before": "21:00"}) and compre_hours({"after": "18:30"}):
"do something"
这与使用“介于”选项基本相同。
您可以简单地从您的 datetime
对象中提取一个 time
对象并进行直接比较。
>>> from datetime import time, datetime as dt
>>> dt.now()
datetime.datetime(2022, 3, 8, 15, 0, 56, 393436)
>>> dt.now().time() > time(14, 30)
True
>>> dt.now().time() > time(15, 30)
False