2017-04-03 101 views
2

標題說明了一切。我正在編寫一個腳本來向API發出預定的GET請求。我希望在下一次API調用時打印,這將是前一次調用的15分鐘。使用timedelta在python中添加15分鐘到當前時間戳

我很接近,但已運行到以下錯誤:TypeError: a float is required

這裏是我的代碼:

import time, datetime 
from datetime import datetime, timedelta 

while True: 
    ## create a timestamp for the present moment: 
    currentTime = datetime.datetime.fromtimestamp(time.time()).strftime("%Y-%m-%d %H:%M:%S") 
    print "GET request @ " + str(currentTime) 

    ## create a timestamp for 15 minutes into the future: 
    nextTime = datetime.datetime.now() + datetime.timedelta(minutes = 15) 
    print "Next request @ " + str(datetime.datetime.fromtimestamp(nextTime).strftime("%Y-%m-%d %H:%M:%S") 
    print "############################ DONE #############################" 
    time.sleep(900) ## call the api every 15 minutes 

我能得到的東西的工作(那種)改變時以下行:

print "Next request @ " + str(nextTime) 

但是,這會打印一個帶有六位小數的時間戳,以毫秒爲單位。我想保留%Y-%m-%d %H:%M:%S格式的東西。

任何輸入表示讚賞,謝謝!

+0

除了你的主要問題之外,沒有必要在這裏混合使用'time'和'datetime'模塊。只要堅持'datetime' – roganjosh

回答

1

您不需要使用datetime.fromtimestamp,因爲nextTime已經是日期時間對象(而不是浮點型)。所以,簡單地使用:

nextTime = datetime.datetime.now() + datetime.timedelta(minutes = 15) 
print "Next request @ " + nextTime.strftime("%Y-%m-%d %H:%M:%S") 
+0

感謝您的輸入,這有助於我更好地理解日期時間對象。 – spacedSparking

1

關閉。這裏沒有必要使用fromtimestamp。您可以在最後幾行的減少:

import datetime as dt 

nextTime = dt.datetime.now() + dt.timedelta(minutes = 15) 
print "Next request @ " + dt.datetime.strftime(nextTime, "%Y-%m-%d %H:%M:%S") 

換句話說,通過datetime對象nextTime作爲第一個參數來strftime

+0

我很接近,我只是想通了!很高興看到另一種做法。謝謝! – spacedSparking

+0

@spacedSparking正如我所看到的,你的回答在我的後面出現了,我很高興你修復了它:)當你發現,你也可以在'nextTime'上調用'strftime'方法,而不需要'dt.datetime.strftime()' 。 – roganjosh

0

當我問這個問題,我發現我在做什麼錯?

對於那些誰是好奇,這裏是解決方案:

import time, datetime 
from datetime import datetime, timedelta 

while True: 
    ## create a timestamp for the present moment: 
    currentTime = datetime.datetime.fromtimestamp(time.time()).strftime("%Y-%m-%d %H:%M:%S") 
    print "GET request @ " + str(currentTime) 

    ## create a timestamp for 15 minutes into the future: 
    nextTime = datetime.datetime.now() + datetime.timedelta(minutes = 15) 
    print "Next request @ " + str(nextTime.strftime("%Y-%m-%d %H:%M:%S")) 
    print "############################ DONE #############################" 
    time.sleep(900) ## call the api every 15 minutes 
1

你可以只使用時間戳,而不是實現它:

import time 
from datetime import datetime 

while True: 
    # create a timestamp for the present moment: 
    currentTime_timestamp = time.time() 
    currentTime = datetime.fromtimestamp(
     currentTime_timestamp 
    ).strftime("%Y-%m-%d %H:%M:%S") 
    print "GET request @ " + str(currentTime) 

    # create a timestamp for 15 minutes into the future: 
    nextTime = currentTime_timestamp + 900 # 15min = 900 seconds 
    print "Next request @ " + str(datetime.fromtimestamp(
     nextTime 
    ).strftime("%Y-%m-%d %H:%M:%S")) 
    print "############################ DONE #############################" 
    time.sleep(900) # call the api every 15 minutes 

我得到的輸出是:

GET request @ 2017-04-03 16:31:34 
Next request @ 2017-04-03 16:46:34 
############################ DONE ############################# 
相關問題