Python检查分钟是否已通过

时间:2013-04-14 14:20:14

标签: python

我每分钟运行一次脚本的一部分并想出了这个:

def minutePassed(oldminute):
    currentminute = time.gmtime()[4]

    if ((currentminute - oldminute) >= 1) or (oldminute == 59 and currentminute >= 0):
        return True
    else:
        return False

这里的问题是,如果分钟是59,它每次都会运行,直到过去那段时间 - 这对我来说并不是一件好事。但我仍然不喜欢它发生!

我现在想到了这样的事情:

def minutePassed(oldminute):
    currentminute = time.gmtime()[4]

    if ((currentminute - oldminute) >= 1) or (oldminute == 59 and currentminute >= 0 and ran == false):
        ran = True
        return True
    else:
        return False

然后在脚本的另一部分,当分钟是!= 59并且变量不是假的时候我再次变为假 - 但这看起来很粗糙?

另一方面 - 有没有其他方法来检查是否已经过了一分钟?也许我让事情变得复杂......

编辑:也许我不够清楚:

  1. 每分钟仅运行一次。
  2. 执行时间会有很多秒,但需要不到30秒。
  3. 我现在正在看timedelta。

6 个答案:

答案 0 :(得分:16)

不要像这样的分钟工作;如果时间是,例如00:00:59,您的代码将相信一分钟已经过了下一秒。

相反,使用time.time()之类的东西,它返回自纪元以来经过的秒数:

def minute_passed(oldepoch):
    return time.time() - oldepoch >= 60

出于同样的原因,这仍然可能会被关闭几秒钟,但这可能更容易接受。

答案 1 :(得分:7)

您可以使用自纪元以来的秒数来获取以秒为单位的时间,这样您就不必担心分钟缠绕:

import time
oldtime = time.time()
# check
if time.time() - oldtime > 59:
    print "it's been a minute"

答案 2 :(得分:0)

使用time.sleep

from time import sleep

while True:
    # do something
    sleep(60)

答案 3 :(得分:0)

我认为您会发现在time模块中使用time()功能会更加容易,该功能会返回自'纪元以来经过的秒数。

import time

oldtime = time.time()

def minutePassed(oldtime):
    currenttime = time.time()
    if currenttime - oldtime > 60 and ran == False:
        ran = True
        return True
    else:
        return False

答案 4 :(得分:0)

我在timedelta上并没有太大的成功,所以我选择了以前粗略的想法:

def minutePassed(oldminute):
    currentminute = time.gmtime()[4]

    if ((currentminute - oldminute) >= 1) or (oldminute == 59 and currentminute == 0):
        return True
    else:
        return False

然后在剧本中:

while True:
    dosomething()

    if minutePassed(time.gmtime(lastrun)[4]):
        domore
        lastrun = time.time()

这对我来说完全没问题 - 只运行一次 - 分钟 - 因为每个循环的执行时间不可靠,所以我在这里睡觉或任何事情都是不好的选择。

答案 5 :(得分:-1)

我遇到了完全相同的问题,我想我找到了一个解决方案:

import time


oldtime = time.time()
print oldtime

while oldtime + 60 != time.time():

    if oldtime + 3 == time.time():
        print "60 secs passed"
        print time.time()
        break

您可以删除打印报表,我将它们放在那里只是为了看它是否有效,希望它是您正在寻找的。