在Python中访问datetime.now()值

时间:2013-12-09 21:58:50

标签: python datetime time while-loop timedelta

我希望能够在我的程序中实现一个条件,它只运行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)

由于

4 个答案:

答案 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