如何比较小时和分钟?

6

我有四个变量:

start_hour = '12'
start_minute = '00'
end_hour = '22'
end_minute = '30'

并且从日期时间:

current_hour = datetime.now().hour
curren_minute = datetime.now().minute

我希望能够比较当前时间是否在指定范围内:

if int(start_hour) <= current_hour and int(end_hour) >= current_hour:
    something

但如何使用分钟实现这一点?

你用小时的方式做就可以了吗? - Morgan Thrapp
1
你是什么意思,你想让某事在12:30到22:30之间发生? - Marko Mackic
5
将两个时间转换为分钟。 - Jongware
4个回答

17
您可以使用datetime.timedelta进行可靠的比较。您可以以不同的时间单位(小时,分钟,秒等)指定时间差。这样,您就无需显式地转换成小时、分钟等。例如,要检查当前时间是否距离start_time超过一小时:
if abs(datetime.now() - start_time) > datetime.timedelta(hours=1):
    # Do thing 

您还可以使用 timedelta 来按给定的时间量移动时间:

six_point_five_hours_from_now = datetime.now() + datetime.timedelta(hours=6, minutes=30)

使用timedelta最好的一点是,除了易于转换单位之外,它还可以自动处理跨越多个日期等时间差异。


13

一个更好的方法是将两个时间都转换成分钟:

start_time = int(start_hour)*60 + int(start_minute)
end_time = int(end_hour)*60 + int(end_minute)
current_time =  datetime.now().hour*60 +datetime.now().minute
if start_time <= current_time and end_time >= current_time:
    #doSomething

如果需要包含秒数,则将所有内容转换为秒。


9

怎么样:

>>> import datetime

>>> now = datetime.datetime.now()

>>> breakfast_time = now.replace( hour=7, minute=30, second=0, microsecond=0 )

>>> lunch_time = now.replace( hour=12, minute=30, second=0, microsecond=0 )

>>> coffee_break = now.replace( hour=16, minute=00, second=0, microsecond=0 )

>>> breakfast_time <= lunch_time <= coffee_break
True

3

仅使用 datetime 对象完成全部操作的简单清晰方法如下:

now = datetime.now()
start = now.replace(hour = int(start_hour), minute = int(start_minute))
end = now.replace(hour = int(end_hour), minute = int(end_minute))

if start <= now <= end:
    print('something')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接