根据当前时间更改变量

时间:2018-09-13 01:06:38

标签: python

我正在尝试每个sleep_time运行python脚本,但是我希望此sleep_time变量根据一天中的当前时间进行更改。该程序用于分析库存数据,因此在白天(上午8:30至下午5:30),我希望该程序每60秒更新一次其数据。如果不在此时间之间,我只需要每10分钟更新一次。我当前拥有的代码如下:

sleep_time = 60
ts = time.time()
st = datetime.datetime.fromtimestamp(ts).strftime('%H:%M')

if (st >= '8:30' and st <='17:30'):
    sleep_time = 60

if(st < '8:30' and st >'17:30'):
    sleep_time = 600


while True: 
#runs this code every sleep_time seconds to constantly update
    ...
    time.sleep(sleep_time)

但是我无法使用它,因为st是一个字符串,而且我不确定如何比较这样的字符串。任何帮助将不胜感激

3 个答案:

答案 0 :(得分:2)

Python有一个datetime模块,该模块提供了datetime数据类型。

您可以在两个甚至三个日期时间之间进行比较。

datetime.now()为您提供当前本地日期和时间的时间戳,而datetime.today()也为您提供当前本地日期和时间的时间戳。您可以用datetime.replace()替换日期时间数据类型的特定值。

from datetime import datetime


while True:

    #You should define sleep_time inside the loop. Otherwise it won't change for the rest of the loop.
    if datetime.today().replace(hour=8, minute=0, second=0, microsecond=0) <= datetime.now() <= datetime.today().replace(hour=15, minute=30, second=0, microsecond=0): 
        sleep_time = 60
    else: 
        sleep_time = 600

    #your code here
    time.sleep(sleep_time)

您可能想知道datetime.now()和datetime.today()有什么区别,因为它们产生相同的结果。

根据文档,datetime.now()比datetime.today()更准确,并且对于时区可能需要一个tz arg。

答案 1 :(得分:0)

我只是将时间分为小时和分钟,然后将它们转换为整数。然后,您可以计算总分钟数并将其与任何时间(8:30-> 510、17:30-> 1050)进行比较。

# rest of implementation
time_h = datetime.datetime.fromtimestamp(ts).strftime('%H')
time_m =  datetime.datetime.fromtimestamp(ts).strftime('%M')

total_min = int(time_h) * 60 + int(time_m)
if (total_min >= 510 and total_min <= 1050):
    sleep_time = 60

if(total_min < 510 and total_min > 1050):
    sleep_time = 600

# rest of implementation

如何在几分钟内找到时间:60 * hours + minutes

答案 2 :(得分:0)

一方面,您有datetime.datetime个对象,另一方面,您有字符串。两者不可比,因此必须将其中一种转换为另一种(两种方式都有可能),以便能够进行比较。

关键是比较时,结果应与您要比较的结果兼容。

检查[Python 3]: strftime() and strptime() Behavior中有关转换的规则。

您决定将所有内容都转换为字符串(这是最直接的方法,特别是对于经验不足的人(它可以正常工作,并且非常好),尽管我建议反之亦然) 。在 Python 中(实际上我不知道用哪种编程语言来处理不同的事物),字符串是按<字典>字母顺序([Wikipedia]: Lexicographical order)或按字母顺序比较的。

让我们看一下转换:

>>> datetime.datetime.fromtimestamp(time.time()).strftime('%H:%M')
'04:29'

如所见,小于10的数字(代表小时,分钟)留有 0 0 00 ),并且您的字符串应遵循相同的规则

因此,将您的'8:30'字符串修改为' 0 8:30'应该可以解决问题,因为例如< em> '11:26'是:

  • 少于'8:30'(如'1' < '8')-这显然是错误的
  • 大于 '08:30'(如'1' > '0')-正确