我的时间定义如下:“%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”将适用于将来的所有星期。
答案 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天),这应该可以满足您的需求。