使用timedelta将当前时间戳添加15分钟

时间:2017-04-03 19:17:45

标签: python datetime timestamp typeerror timedelta

标题说明了一切。我正在编写一个脚本来向API发出预定的GET请求。我想在下一次API调用时进行打印,这比前一次调用的时间长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格式。

4 个答案:

答案 0 :(得分:3)

您不需要使用datetime.fromtimestamp,因为nextTime已经是日期时间对象(而不是浮点数)。所以,只需使用:

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

答案 1 :(得分: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

答案 2 :(得分: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 #############################

答案 3 :(得分: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
相关问题