[英]Accessing datetime.now() values in Python
我希望能够在程序中实现一个条件,该条件只能运行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)
谢谢
除非要向本地用户显示,否则请不要使用诸如now()
返回的本地日期时间对象。 有许多危险 。
“现在几点?”之间有区别。 和“过去了几秒钟?” 。 前者更容易发现。
要运行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转换而改变了计算机时间的情况下,它仍然有效。 有关在Python中引入time.monotonic
,请参阅pep-418的Rational
部分 。
您可以根据需要/可用系统选择其他计时器。 例如,您可以使用计时器来提供更高的精度,但可能会更快地溢出,或者考虑到NTP调整可能会提供比本地CPU更好的时钟或系统处于睡眠或挂起状态的时间 (想像一下会发生什么情况)几个小时后打开笔记本计算机的盖子后)。
如果您想在某个本地时间发生某事,而不管自现在以来经过了几秒钟,那么datetime.now()
对象(天真细分时间)可能会很有用,例如,无论在哪一天的7pm
之后(午夜之前)执行某项操作:
from datetime import datetime, time
if datetime.now().time() > time(19):
# do something
您可以将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
>>> 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)
。
我希望能够在程序中实现一个条件,该条件只能运行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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.