我希望能够在我的程序中实现一个条件,它只运行N个小时,也许用户可以指定N,但是不要超前。
我想我可以使用datetime.now()
并将下面的值存储在变量time
>>> time
>>> time = datetime.datetime(2013, 12, 9, 21, 50, 32, 405329)
关于如何访问( - )之间的第四个字段,看到它是一个字符串的任何想法?
我的情况类似于while time != timeEnd
,其中timeEnd将是以下值:
>>> timeEnd = datetime.datetime(2013, 12, 9, 21+N, 50, 32, 405329)
由于
答案 0 :(得分:5)
除非您想向本地用户显示,否则请勿使用now()
返回的不知道的本地日期时间对象。 There are many perils
有一个difference between "What time is it?" and "How many seconds elapsed?"。前者更容易找到。
要运行N
小时,您可以:
from time import monotonic as timer # or time.time if it is not available
endtime = timer() + N * 3600
while timer() < endtime:
# do your thing (mind what clocks use sleep(), join(), lock.acquire())
即使手动执行程序或由于DST转换而导致计算机时间发生变化,它仍然有效。请参阅Rational
section from pep-418 for introducing time.monotonic
in Python。
您可以根据需要/可用系统选择其他计时器。例如,您可以使用提供更好精度但可能更快溢出的计时器,或者考虑可能提供比本地CPU或the time while the system were asleep or suspended更好的时钟的NTP邻接(想象一下,打开之后您想要发生什么?几个小时后你的笔记本封面。)
datetime.now()
对象(天真的故障时间)可能有用,如果你想在某个当地时间发生某事,不管从现在开始经过多少秒,例如,在7pm
任何一天之后做某事(在午夜之前):
from datetime import datetime, time
if datetime.now().time() > time(19):
# do something
答案 1 :(得分:2)
您可以向timedelta
添加datetime
以获取新的datetime
。
>>> import datetime
>>> now = datetime.datetime.now()
>>> end_time = now + datetime.timedelta(hours=6)
>>> print now
2013-12-09 17:03:06.979628
>>> print end_time
2013-12-09 23:03:06.979628
>>>
则...
while datetime.datetime.now() < end_time:
pass # do work
答案 2 :(得分:1)
>>> from datetime import datetime
>>> d = datetime.now()
>>> d
datetime.datetime(2013, 12, 9, 23, 0, 20, 669780)
>>> d.hour
23
如果要检查脚本是否在N
小时内运行,我建议您检查(now() - start_time).total_seconds()
值。它告诉你脚本运行了多少秒。
同样,您可以像timeEnd
一样设置timeEnd = time + timedelta(hours=N)
。
答案 3 :(得分:0)
我希望能够在我的程序中实现一个条件,它只运行N个小时,也许用户可以指定N,但是不要超前。
...
关于我如何访问( - )之间的第四个字段的任何想法,看到它是一个字符串?
我的代码或任何字符串中都没有--
。你有一个datetime
对象,它有一个hour
成员。但是,我无法想象你在代码中如何使用这样的东西。
只需减去两个datetime
个对象,即可获得timedelta
个对象。您可以将timedelta
对象与另一个对象进行比较。例如:
>>> start_time = datetime.datetime.now()
# 2 hours later
>>> end_time = datetime.datetime.now()
>>> duration = end_time - start_time
>>> duration > datetime.timedelta(hours=5)
False
# another 4 hours
>>> datetime.datetime.now() - start_time > datetime.timedelta(hours=5)
True