解析日/时间格式

时间:2018-01-07 10:04:13

标签: python parsing datetime time

在python中使用时间有些麻烦。我试图解析一个维护窗口字符串,如果我们在维护窗口中就可以解决问题。到目前为止,我有以下但似乎没有工作。

#!/usr/bin/python

from datetime import datetime
import re
import time

maintenance="sat:02:00-sun:03:00"

# Split start time and end time
main_start, main_end = re.split(r"-", maintenance)

main_start = datetime.strptime(main_start, "%a:%H:%M")
main_end = datetime.strptime(main_end, "%a:%H:%M")
now = datetime.now()

if now >= main_start and now <= main_end:
    print 'In maintenance window'

我认为问题在于我只想集中精力于一周和一天的日子,但考虑到年份和月份。

努力解决如何实现这一目标。

我也不知道datetime是否可以将输入的一周(%a)视为全部小写。

任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:1)

使用dateutil,如下所示:

>>> from dateutil.parser import *
>>> main_start, main_end = maintenance.split("-") # don't use re for this
>>> main_start_time = parse(main_start.replace(":"," ",1))
>>> main_start_time
datetime.datetime(2018, 1, 13, 2, 0)
>>> main_end_time = parse(main_end.replace(":"," ",1))
>>> main_end_time
datetime.datetime(2018, 1, 7, 3, 0)

现在,请注意这些是相对于今天0h00的日期时间,因为今天是星期日,星期六的下一个相对日期时间是下周。因此,您需要修复main_start_time一周后main_end_time出现的案例,如下所示:

>>> from dateutil.relativedelta import *
>>> main_start_time - relativedelta(days=7)
datetime.datetime(2018, 1, 6, 2, 0)

所以,要进行测试,

>>> import datetime
>>> main_start_time -= relativedelta(days=7)
>>> if main_start_time <= datetime.datetime.now() <= main_end_time:
        print 'In maintenance window'