【问题标题】:Add 15 minutes to current timestamp using timedelta使用 timedelta 将 15 分钟添加到当前时间戳
【发布时间】:2017-08-28 18:58:39
【问题描述】:

标题说明了一切。我正在编写一个脚本来向 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 格式保存内容。

【问题讨论】:

  • 除了你的主要问题,这里没有必要混合timedatetime 模块。只要坚持datetime

标签: python datetime timestamp typeerror timedelta


【解决方案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

【讨论】:

  • 我很接近,我刚刚想通了!很高兴看到另一种方法。谢谢!
  • @spacedSparking 如我所见,您的答案出现在我之后一秒钟,很高兴您修复了它:) 正如您所发现的,您也可以在 nextTime 上调用 strftime 方法,而无需 @987654328 @.
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    我一问这个问题就发现我做错了什么......

    对于那些好奇的人,这里是解决方案:

    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
    

    【讨论】:

      【解决方案4】:

      你可以通过使用时间戳来实现它:

      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 #############################
      

      【讨论】:

        猜你喜欢
        • 2020-07-02
        • 1970-01-01
        • 2013-12-31
        • 1970-01-01
        • 1970-01-01
        • 2017-03-28
        • 1970-01-01
        • 1970-01-01
        • 2019-12-20
        相关资源
        最近更新 更多