[英]Comparing time of day on day of week to time of day on day of week
有沒有一種直接的方法來測試now
是否在同一周的周五下午 5 點和周日下午 5 點之間?
此嘗試返回False
,因為它不比較now.time()
相對於now.isoweekday() >= 5
或now.isoweekday() <= 7
首先是True
。
[in]:
import datetime
now = datetime.datetime.now()
print(now)
(now.isoweekday() >= 5 and now.time() >= datetime.time(17, 0, 0, 0)) and (now.isoweekday() <= 7 and now.time() <= datetime.time(17, 0, 0, 0))
[out]:
2022-12-17 10:00:32.253489
False
本質上,您要查找的條件是:周五下午 5 點之后、周六任何時間或周日下午 5 點之前。 這很容易表達:
(now.isoweekday() == 5 and now.time() >= datetime.time(17, 0, 0, 0)
or now.isoweekday() == 6
or now.isoweekday() == 7 and now.time() <= datetime.time(17, 0, 0, 0)
)
另一種選擇是這樣的:
now
屬於哪個日歷周now
是否在這些界限之間但我認為如果你只是測試這個條件,那實際上比上面的更復雜; 如果它是重復模式的一部分,這樣的方法會更有意義。
import datetime
def is_weekend_time(my_datetime):
if (my_datetime.isoweekday() == 5):
return datetime.time(17, 0, 0, 0) <= my_datetime.time()
if (my_datetime.isoweekday() == 6):
return True
if (my_datetime.isoweekday() == 7):
return my_datetime.time() < datetime.time(17, 0, 0, 0)
return False
now = datetime.datetime.now()
print(now)
print(is_weekend_time(now))
print()
friday_before = datetime.datetime(2022,12,16,16,59,59)
print('Friday Before')
print(friday_before)
print(is_weekend_time(friday_before))
print()
friday_after = datetime.datetime(2022,12,16,17,00,00)
print('Friday After')
print(friday_after)
print(is_weekend_time(friday_after))
print()
saturday = datetime.datetime(2022,12,17,16,59,59)
print('Saturday')
print(saturday)
print(is_weekend_time(saturday))
print()
sunday_before = datetime.datetime(2022,12,18,16,59,59)
print('Sunday Before')
print(sunday_before)
print(is_weekend_time(sunday_before))
print()
sunday_after = datetime.datetime(2022,12,18,18,00,00)
print('Sunday After')
print(sunday_after)
print(is_weekend_time(sunday_after))
2022-12-17 16:01:40.826755
True
Friday Before
2022-12-16 16:59:59
False
Friday After
2022-12-16 17:00:00
True
Saturday
2022-12-17 16:59:59
True
Sunday Before
2022-12-18 16:59:59
True
Sunday After
2022-12-18 18:00:00
False
這是另一種實際比較日期時間的方法
now = datetime.datetime.now()
weekday = now.isoweekday()
print(now, weekday)
upper_bound = (now + datetime.timedelta(days=7 - weekday)).replace(
hour=17, minute=0, second=0, microsecond=0
)
lower_bound = (now - datetime.timedelta(days=weekday - 5)).replace(
hour=17, minute=0, second=0, microsecond=0
)
print(upper_bound, upper_bound.isoweekday())
print(lower_bound, lower_bound.isoweekday())
lower_bound <= now < upper_bound
2022-12-18 00:37:56 7
2022-12-18 17:00:00 7
2022-12-16 17:00:00 5
True
如果在計算邊界之前應用替換函數實際上會更好,但這會更容易理解(並且更可定制)
編輯:
好吧,當我看到一些關於可讀性的評論時,我已經更新了稍長但更具可讀性的版本
now = datetime.datetime.now()
print(now, now.isoweekday())
def weeekday_to_datetime(now, target_weekday, target_hour):
target_date = now + datetime.timedelta(days=(target_weekday - now.isoweekday()))
return target_date.replace(hour=target_hour, minute=0, second=0, microsecond=0)
lower_bound = weeekday_to_datetime(now, target_weekday=5, target_hour=17)
print(lower_bound, lower_bound.isoweekday())
upper_bound = weeekday_to_datetime(now, target_weekday=7, target_hour=17)
print(upper_bound, upper_bound.isoweekday())
lower_bound <= now < upper_bound
2022-12-18 02:08:47 7
2022-12-16 17:00:00 5
2022-12-18 17:00:00 7
True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.