Python:将模糊小时转换为时间对象的有效方法?

zhu*_*yxn 5 python datetime

我有一个字符串列表如下:

4:00-5:00PM
11:00-2:00PM
12:00-1:00PM
11:00-1:00AM
Run Code Online (Sandbox Code Playgroud)

我试图找到一种有效的方法来创建两个时间对象(我想这是跟踪一段时间的唯一方法,我稍后将与日期对象结合).人类很清楚我们在11:00-1:00 AM所说的意思,但想知道将此转换为以下内容的有效方法是什么:

datetime.time(23, 0)
datetime.time(1, 0)
Run Code Online (Sandbox Code Playgroud)

我目前的方法是第一次,并创建一个PM和AM版本,使用结束时间(指定)的timedelta,并将两个差异中较短的差异作为正确的.

Bre*_*arn 3

这是一个简单的实现。

    >>> def timeRange(timestr):
    ...     t1, t2 = timestr.split("-")
    ...     timeFormat = "%I:%M%p"
    ...     t1AM = datetime.datetime.strptime(t1 + "AM", timeFormat)
    ...     t1PM = datetime.datetime.strptime(t1 + "PM", timeFormat)
    ...     t2 = datetime.datetime.strptime(t2, timeFormat)
    ...       
    ...     if (t2 - t1AM).seconds < (t2-t1PM).seconds:
    ...         return t1AM.time(), t2.time()
    ...     else:
    ...         return t1PM.time(), t2.time()
    >>> timeRange("11:00-2:00PM")
    (datetime.time(11, 0), datetime.time(14, 0))
    >>> timeRange("4:00-5:00PM")
    (datetime.time(16, 0), datetime.time(17, 0))
    >>> timeRange("11:00-1:00AM")
    (datetime.time(23, 0), datetime.time(1, 0))
    >>> timeRange("11:00-2:00PM")
    (datetime.time(11, 0), datetime.time(14, 0))
    >>> timeRange("12:00-1:00PM")
    (datetime.time(12, 0), datetime.time(13, 0))
Run Code Online (Sandbox Code Playgroud)

这会返回一个time对象,但如果需要,您可以将其滚动到日期时间对象中。