繁体   English   中英

Python日期时间和星期几比较

[英]Python datetime and day of week comparison

我有以下格式定义时间:“%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”将适用于将来的所有星期。

日期时间会一无所知,你正在谈论周一。 自纪元以来已有1000年。

我建议你研究一下dateutil包 它适用于“人类”语义:

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

这应该让你进入最终的解决方案。

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

您可以使用大于/小于“<”和“>”运算符来解决问题,以进行日期时间评估。 这是一个简单比较的证明http://pastebin.com/miTUW9nF

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM