Python日期时间和星期几比较

时间:2014-02-04 00:24:01

标签: python datetime

我的时间定义如下:“%A%H:%M:%S”,即“星期一06:00:00” 现在,使用上面的格式,我定义了一个时间窗口:  “星期一06:00:00” - “星期一18:00:00”

我现在想检查当前时间是否在时间窗口内。为此,我使用的是datetime实用程序。

    import datetime

    # current time in str
    current_time = datetime.datetime.strftime(datetime.datetime.now(),'%A %H:%M:%S')

    # convert to datetime object
    current_time = datetime.datetime.strptime(current_time, '%A %H:%M:%S')

    # print current_time produces: 1900-01-01 19:13:53
    # and day of week information is lost

然而,当下,我将current_time转换为datetime对象,一周中的某一天信息丢失。

在Python中比较包含星期几的时间窗口的最佳方法是什么? 顺便说一句:我希望将来重复时间窗口。例如,“星期一06:00 - 星期二05:00”将适用于将来的所有星期。

2 个答案:

答案 0 :(得分:2)

datetime对你所说的星期一哪个一无所知。自那个时代以来已有1000个。

我建议您查看dateutil package。它适用于“人与人”的语义:

>>> import dateutil.parser
>>> dateutil.parser.parse('Monday')
datetime.datetime(2014, 2, 3, 0, 0)
>>> dateutil.parser.parse('Monday 18:30:00')
datetime.datetime(2014, 2, 3, 18, 30)

请注意它假设星期一意味着今天(星期一)。周二和周日(下图)意味着周二,周日:

>>> dateutil.parser.parse('Tuesday 18:30:00')
datetime.datetime(2014, 2, 4, 18, 30)
>>> dateutil.parser.parse('Sunday 18:30:00')
datetime.datetime(2014, 2, 9, 18, 30)

为了更进一步,请查看dateutil中的rrule模块/类。和内置的日历模块。例如,我可以使用rrule:

next_five = rrule.rrule(
    rrule.WEEKLY, 
    count=5, 
    dtstart=dateutil.parser.parse('Sunday 18:30:00'),
)  

这将返回从星期日下午6:30开始的接下来5周的迭代器。迭代器将产生

[datetime.datetime(2014, 2, 5, 18, 30), 
 datetime.datetime(2014, 2, 12, 18, 30), 
 datetime.datetime(2014, 2, 19, 18, 30), 
 datetime.datetime(2014, 2, 26, 18, 30), 
 datetime.datetime(2014, 3, 5, 18, 30)]

这可以帮助您了解最终解决方案。

答案 1 :(得分:0)

根据我的经验,Datetime对象是YYYY:MM:DD HH:MM:SS(或多或少)。可以使用日期时间weekday()从该对象派生星期几 - 请参阅http://docs.python.org/2/library/datetime.html#datetime.date.weekday

您可以使用大于/小于“<”来解决您的问题和“>”运营商进行日期评估。以下是简单比较的证明http://pastebin.com/miTUW9nF

你的逻辑是(释义):“如果Xtime> windowstart和Xtime< windowend然后Xtime在窗口中”

日期时间与第二个相比,我的例子现在和(现在是10天),这应该可以满足您的需求。