繁体   English   中英

在Python中访问datetime.now()值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM