Welp,就Python而言,我是一个菜鸟。毫无疑问。做过一些VBS和VB所以我有点了解。
我使用Python做的任务似乎很简单:只在这些时间运行一个动作:
Mon: between 1:30 am and 7:30 am
Tues – Fri: between 3:00 am 7:30 am
Sat: between 1:00 am and 9:00 am and 5:00 pm to Midnight
Sun: Midnight to 8:30 am
麻烦的是,我能想到的就是这个(我甚至不确定这是否正常工作):
import time
def IsOffHour(time):
if (time.tm_wday > 4):
return True
elif (time.tm_hour >= 17):
return True
elif (time.tm_hour < 8):
return True
else:
return False
now = time.localtime()
if IsOffHour(now):
print 'hello cruel world !'
我不确定如何处理从:30
开始的时间。这有点难以测试,也许我可以更改系统日期和角钱来测试它。
似乎我很接近,对想法持开放态度。
谢谢!
答案 0 :(得分:2)
您应该尝试time
模块,而不是使用datetime
模块。这样的任务要容易得多。
如果您使用虚构日期(或替换支票中的日期),您可以这样做:
>>> x = datetime.datetime(1, 1, 1, 13, 37, 40)
>>> a = datetime.datetime(1, 1, 1, 1, 30, 0)
>>> b = datetime.datetime(1, 1, 1, 7, 30, 0)
>>> a < x < b
False
>>> x = datetime.datetime(1, 1, 1, 5, 0, 0)
>>> a < x < b
True
答案 1 :(得分:0)
我的想法:
if time_wday == ...
或if time_wday in [...]
)strftime()
),然后比较为字符串,因此time.tm_hour >= ..
代替hrstr > '13:30' and hrstr < '19:30'
这给出了如下代码:
def IsOffHour(dt):
hrstr = '%02d:%02d' % (dt.tm_hour, dt.tm_min)
if dt.tm_wday == 0:
return '01:30' <= hrstr <= '07:30'
if dt.tm_wday in [1, 2, 3, 4]:
return '03:00' <= hrstr <= '07:30'
if dt.tm_wday == 5:
return '01:00' <= hrstr <= '09:00' or hrstr >= '17:00'
if dt.tm_wday == 6:
return hrstr <= '08:30'
return False
答案 2 :(得分:0)
您应该做的是将time
个对象与time
个对象进行比较,而不是提取小时和分钟并手动执行此操作。
因此,使用time
对象在脚本中定义可接受的时间窗口,然后查看当前时间是否落在任何窗口中。
from datetime import datetime,time
# Set our allowed time windows in a dictionay indexed by day, with 0 =
# Monday, 1 = Tuesday etc. Each value is list of tuples, the tuple
# containing the start and end time of each window in that day
off_windows = {
0: [(time(1,30),time(7,30))],
1: [(time(3,0),time(7,30))],
2: [(time(3,0),time(7,30))],
3: [(time(3,0),time(7,30))],
4: [(time(3,0),time(7,30))],
5: [(time(1,0),time(9,0)),(time(16,0),time.max)], #time.max is just before midnight
6: [(time(0,0),time(8,30))]
}
def is_off_hours():
# Get current datetime
current = datetime.now()
# get day of week and time
current_time = current.time()
current_day = current.weekday()
# see if the time falls in any of the windows for today
return any(start <= current_time <= end for (start,end) in off_windows[current_day])
if is_off_hours():
print 'Hello cruel world!'
上面我们使用any
function,如果iterable的任何值为True,则返回True。所以他编码循环通过我们定义了一天的关闭窗口,如果当前时间属于任何一个,则返回true。
关于python这个很好,我们可以说:
start <= current_time <= end
而不是
start <= current_time and current_time <= end