【问题标题】:Get number of seconds until the start of the next hour获取距离下一小时开始的秒数
【发布时间】:2018-10-15 00:37:43
【问题描述】:
  • 我目前使用的 REST API 每小时只允许 1000 次查询
  • 一旦 1000 个查询用完,您就必须等到下一小时的开始才能重置计数器
  • 我的目标是确定在下一小时开始之前我必须等待的秒数
  • 我目前正在使用time.sleep 方法使脚本进入休眠状态,直到下一小时开始

我使用datetime 库整理了一个相当粗略的解决方案,如下所示(为安全起见,增加了两分钟)

import datetime

# Determine the seconds until the next hour (add 2 minutes to be safe)
now = datetime.datetime.now()
next_hour = datetime.datetime(now.year, now.month, now.day, now.hour + 1, 2)
sleep_seconds = (next_hour - now).seconds

# Put the execution to sleep for a while
print("Sleeping for {0} minutes...".format(sleep_seconds // 60))
time.sleep(sleep_seconds)

此脚本确实有效,但在下一个小时是第二天的开始时不可靠。

  • datetime 预计小时值介于 0..23 之间
  • 如果 datetime.datetime.now() 方法返回 23 方法将失败 如果你将24 传递给datetime 对象
  • 如果第二天也穿越到下个月或下一年,那也是不可靠的。

有人可以提出一个更好的解决方案来解决这些问题吗?

【问题讨论】:

  • 你应该可以使用datetime.datetime.now() + timedelta(hours=1)
  • 你为什么想让你的 Api 表现得那样?
  • @erip 该解决方案将简单地将 datetime 对象添加 1 小时到 now() 返回的对象,而不是在下一小时开始时生成 datetime 对象
  • @OlivierMelançon 这不是我创建的 API,这是我需要查询的 API
  • 是的,还有更多工作要做……但要处理翻转。

标签: python datetime timedelta


【解决方案1】:

认为datetime.timedelta 在这种情况下会为您提供帮助。像这样的:

import datetime

delta = datetime.timedelta(hours=1)
now = datetime.datetime.now()
next_hour = (now + delta).replace(microsecond=0, second=0, minute=2)

wait_seconds = (next_hour - now).seconds   

replace 应该可以将您缩短到下一个小时。

【讨论】:

  • 这当然会在下一小时返回,但是生成一个到第二天的 datetime 对象呢?
  • 太棒了。 replace 方法对我有用,能够四舍五入下一小时的日期时间以获得正确的秒数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
相关资源
最近更新 更多