2013-12-09 23 views
2

我希望能夠在我的程序中實現一個只能運行N小時的條件,也許用戶可以指定N,但我們不要跳到前面。在Python中訪問datetime.now()的值

我想我可以用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

你在說什麼? – abarnert

+0

你是在迂腐嗎? – adampski

+0

您不希望進行日期/時間數學檢查,只檢查小時字段 - 您可以在(3小時+ 1分鐘)或(5小時-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 
+0

'datetime.now() jfs

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)

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 
+0

沒有意識到這是一個對象。抱歉!謝謝。 – adampski

4

,除非你想向他們展示給本地用戶不要使用本地不知情datetime對象如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更好的時鐘的NTP鄰接或the time while the system were asleep or suspended(想象在打開筆記本封面後您想要發生什麼幾個小時後)。

:如果你想不管有多少秒通過在一些地方時遇到什麼事情,因爲現在如 7pm後做一些什麼一天(午夜前)

datetime.now()對象(幼稚破舊的時間)可能是有用的

from datetime import datetime, time 

if datetime.now().time() > time(19): 
    # do something