当前位置: 首页 > 面试题库 >

如何使用Python的datetime模块确定当前时间是否在指定范围内?

商绍元
2023-03-14
问题内容

查看当前时间是否在发言10:30 AM和讲话之间的最佳方式是什么4:30 PM

我会想到以下内容,不确定是否正确:

from datetime import datetime
nw = datetime.now()
hrs = nw.hour;mins = nw.minute;secs = nw.second;
zero = timedelta(seconds = secs+mins*60+hrs*3600)
st = nw - zero # this take me to 0 hours. 
time1 = st + timedelta(seconds=10*3600+30*60) # this gives 10:30 AM
time2 = st + timedelta(seconds=16*3600+30*60)  # this gives 4:30 PM
if nw>= time1 or nw <= time2:
    print "yes, within the interval"

请让我知道如果这是正确的方法,可以写出更好的东西吗?


问题答案:

我最初的答案非常具体地针对所提出的问题,并且不适应午夜的时间范围。由于六年后这仍然是公认的答案,因此我在下面合并了@rouble的答案,该答案在我的文档中得到扩展以支持午夜。

from datetime import datetime, time

def is_time_between(begin_time, end_time, check_time=None):
    # If check time is not given, default to current UTC time
    check_time = check_time or datetime.utcnow().time()
    if begin_time < end_time:
        return check_time >= begin_time and check_time <= end_time
    else: # crosses midnight
        return check_time >= begin_time or check_time <= end_time

# Original test case from OP
is_time_between(time(10,30), time(16,30))

# Test case when range crosses midnight
is_time_between(time(22,0), time(4,00))

我仍然坚持下面的原始意见,即该逻辑的大多数应用程序可能更适合于datetime无论如何都将午夜反映为日期更改的对象。



 类似资料:
  • 问题内容: 我确信这在1000个不同的地方完成了1000次。问题是我想知道是否有更好/标准/更快的方法来检查当前“时间”是否在格式指定的两个时间值之间。例如,我的大业务逻辑不应在之间运行。所以这就是我的想法: 示例测试用例: 我正在寻找的是更好的代码 在表现 在外观上 正确地 我不想要的 第三方库 异常处理辩论 变量命名约定 方法修饰符问题 问题答案: 这就是您需要做的所有事情,此方法与输入松散耦

  • 问题内容: 问题是我希望它忽略日期,而只考虑时间。这是我所拥有的: 照原样,我得到这个错误: 当我将相关行更改为: 我收到此错误: 我知道我正在使用两个不同的库,但我不确定如何在它们之间进行转换或仅使用一个库就可以完成我想做的事情。我只希望它忽略日期,只检查时间是否在指定范围内。由于我在代码的其他地方使用了一个库,因此必须使用Python 2.6。 问题答案: 这行: 根据docs返回一个对象。

  • 问题内容: 我需要检查当前时间是否在8 AM和3 PM之间。如果在这些时间范围之间,那么我需要返回yes,否则返回false。 但是我不确定我应该在这里使用吗?我可以不使用时间戳并相应地检查时间戳吗?什么是正确的方法? 我仍在使用Java 7。 问题答案: 如果您使用的是Java 8之前的Java版本,请查看Joda的API文档。 具体来说,有一个AbstractInterval#contains

  • 嗨,朋友们,我很难找到多个日期时间范围是否相互重叠,如果是,则它们重叠的时间段。我已经参考了以下链接 确定两个日期范围是否重叠 和 算法 以检测重叠的时间段等等。 不知道这是否正确,我有n=3的示例解释。 假设我有“n”开关 sw1,sw2 我遇到过这种可能性。可能还有更多。仍在寻找其他的。这里常见的时间段是从10:00到10:15即15分钟,10:20到10:30即10分钟。这些开关打开(“1”

  • 问题内容: 嗨,我正在尝试检查当前时间是否在某个时间范围内,例如8:00-16:30。下面的代码显示可以将当前时间作为字符串获取,但是不确定如何使用此值来检查它是否在上面指定的时间范围内。任何帮助将不胜感激! 问题答案: 有很多方法可以做到这一点。就我个人而言,如果可以避免的话,我不喜欢使用字符串。我宁愿处理日期组件。 下面的代码创建的日期为8:00和16:30,然后比较日期以查看当前日期/时间是

  • 问题内容: 我有一个可选参数,它本身支持参数列表。 我的意思是,它应该支持: -f 1 2 -f 1 2 3 但不是: -f 1 -f 1 2 3 4 有没有办法在argparse中强制执行此操作?现在,我使用nargs =“ *”,然后检查列表长度。 编辑: 根据要求,我需要的是能够定义一个可接受数量的参数范围。我的意思是说(在示例中)2或3个args是正确的,但不是1或4或不在2..3范围内的