【问题标题】:python epoch to hour with roundingpython 纪元到小时,四舍五入
【发布时间】:2015-10-07 14:00:07
【问题描述】:

我首先使用一个纪元时间戳并将其转换为 UTC dt:

d = datetime.utcfromtimestamp(input_epoch)

使用以下 SO 帖子:How can I get hours from a Python datetime?,然后我正在抓紧时间:

h = d.hour + d.minute / 60. + d.second / 3600

但这映射了一个时代,可以转换为上午 10 点 59 分 59 秒到上午 10 点。我想要一个函数,它将使用舍入将给定的纪元映射到最近的小时,例如,小时:00:00-> 小时:00:30:00 -> 小时,小时:30:01-> 小时:59:59 - > 小时+1。

我目前最好的想法是:

d = datetime.utcfromtimestamp(input_epoch+3600/2)

但我不相信这是正确的。是否有另一个内置库函数可以更严格地执行此操作?

【问题讨论】:

  • 为什么不增加 30 分钟呢?如果分钟超过 30 分钟,那么再增加 30 分钟会将时间更改为下一个小时。因此,您所拥有的应该可以正常工作,但您可以将其更改为 1800 而不是 3600/2
  • 注意:d.second / 3600d.second / 3600. 在 Python 2 中存在很大差异(您链接的帖子使用后者)。
  • @J.F.Sebastian:这给了我一个提醒人们的借口:尽可能使用 Py3 语法!我基本上每个文件都以from __future__ import absolute_import, division, print_function 开头,因为我在Py2 和Py3 中都工作,而且一直需要转换思维是很痛苦的。 (是的,我知道,现有代码并不总是可行的)

标签: python datetime


【解决方案1】:

如果您想将"round half up" tie-breaking rule 用于正时间戳 (input_epoch > 0),则添加 30 分钟并将结果截断为一小时是正确的方法:

d = datetime.utcfromtimestamp(3600 * ((input_epoch + 1800) // 3600))

【讨论】:

    【解决方案2】:

    我会去的

    h = d.hour + (d.minute + 30 + (d.second + 30) / 60) / 60
    

    如果hour:29:30 也应该导致hour+1。

    【讨论】:

      猜你喜欢
      • 2020-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 2020-03-05
      • 1970-01-01
      相关资源
      最近更新 更多