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

从datetime中提取时间并确定时间(而非日期)是否在范围内?

邵飞鸿
2023-03-14
问题内容

问题是我希望它忽略日期,而只考虑时间。这是我所拥有的:

import time
from time import mktime
from datetime import datetime

def getTimeCat(Datetime):
    # extract time categories
    str_time = datetime.strptime(Datetime, "%m/%j/%y %H:%M")
    ts = datetime.fromtimestamp(mktime(str_time))

    # --> Morning = 0400-1000
    mornStart = datetime.time(4, 0, 1)
    mornEnd = datetime.time(10, 0, 0)

    # --> Midday = 1000-1600
    midStart = datetime.time(10, 0, 1)
    midEnd = datetime.time(16, 0, 0)

    # --> Evening = 1600-2200
    eveStart = datetime.time(16, 0, 1)
    eveEnd = datetime.time(22, 0, 0)

    # --> Late Night = 2200-0400
    lateStart = datetime.time(22, 0, 1)
    lateEnd = datetime.time(4, 0, 0)

    if time_in_range(mornStart, mornEnd, ts):
      timecat = 0 #morning
    elif time_in_range(midStart, midEnd, ts):
      timecat = 1 #midday
    elif time_in_range(eveStart, eveEnd, ts):
      timecat = 2 #evening
    elif time_in_range(lateStart, lateEnd, ts):
      timecat = 3 #late night

    return timecat

照原样,我得到这个错误:

TypeError: argument must be 9-item sequence, not datetime.datetime

当我将相关行更改为:

str_time = time.strptime(Datetime, "%m/%j/%y %H:%M")

我收到此错误:

TypeError: descriptor 'time' requires a 'datetime.datetime' object but received a 'int'

我知道我正在使用两个不同的库,但我不确定如何在它们之间进行转换或仅使用一个库就可以完成我想做的事情。我只希望它忽略日期,只检查时间是否在指定范围内。由于我在代码的其他地方使用了一个库,因此必须使用Python
2.6。


问题答案:

这行:

str_time = datetime.strptime(Datetime, "%m/%j/%y %H:%M")

根据docs返回一个datetime对象。

您可以通过在解释器中交互式运行以下命令来自己进行测试:

>>> import datetime
>>> datetime.datetime.strptime('12/31/13 00:12', "%m/%j/%y %H:%M")
datetime.datetime(2013, 1, 31, 0, 12)
>>>

然后可以使用.time()方法访问返回的日期时间的时间部分。

>>> datetime.datetime.strptime('12/31/13 00:12', "%m/%j/%y %H:%M").time()
datetime.time(0, 12)
>>>

datetime.time()然后可以将结果用于时间比较。



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

  • 本文向大家介绍coldfusion 日期或时间范围,包括了coldfusion 日期或时间范围的使用技巧和注意事项,需要的朋友参考一下 示例 日期或时间范围的示例。

  • 问题内容: 使用SQL时,是否可以在提供范围的列中插入随机的datetime值? 例如,给定范围为 我对范围部分感到困惑。正如我将要做的 问题答案: 这是一个应该有所帮助的示例: 它使用日期作为基础,将其转换为Unix时间戳,并向基础日期添加0到+2年的随机秒数,并将其转换回DATETIME。 它应该很接近,但在更长的时间内会leap年,其他调整会使其失效。

  • 请让我知道这里出了什么问题。需要找出HH:MM:SS格式的不同之处。

  • 问题内容: 查看当前时间是否在发言和讲话之间的最佳方式是什么。 我会想到以下内容,不确定是否正确: 请让我知道如果这是正确的方法,可以写出更好的东西吗? 问题答案: 我最初的答案非常具体地针对所提出的问题,并且不适应午夜的时间范围。由于六年后这仍然是公认的答案,因此我在下面合并了@rouble的答案,该答案在我的文档中得到扩展以支持午夜。 我仍然坚持下面的原始意见,即该逻辑的大多数应用程序可能更适

  • 问题内容: 如何在MySQL中的日期范围之间选择数据。我的专栏是24小时的祖鲁时间格式。 尽管在这些时间段之间有数据,但不返回任何内容。我是否必须强制 “发件人” 和 “发件人” 字段中的值键入查询? 问题答案: 您需要更新日期格式: