Python日期时间和星期几比较

Python日期时间和星期几比较,python,datetime,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

我用以下格式定义了时间:“%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
但是,当我将当前时间转换为datetime对象时,星期几信息就丢失了

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

根据我的经验,Datetime对象是YYYY:MM:DD HH:MM:SS(或多或少)。可以使用datetime的
weekday()
从该对象派生星期几-请参阅

可以使用大于/小于“”运算符进行日期时间计算来解决问题。这里有一个简单比较的证明

您的逻辑将是(意译):“如果Xtime>WindowsStart和Xtime
Datetime与第二个相比,我的示例是now and(现在是10天),这应该可以满足您的需要。

Datetime对您所说的周一一无所知。从那个时代起已经有1000年了

我建议你调查一下。它应用了“人性化”语义:

>>> 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)]

这应该让你开始最终的解决方案。

如果是在不同的一天,这是否意味着它在窗口中不相等?!我希望时间窗口在将来重复。例如,“星期一06:00-星期二05:00”将适用于未来的所有星期。@user3497我已更新了我的答案。这就是我能提供的全部时间。如果有用,请接受这个答案。谢谢