在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
)视为全部小写。
任何帮助将不胜感激:)
答案 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'