【问题标题】:How to round a Unix/POSIX timestamp to the nearest 30-minutes?如何将 Unix/POSIX 时间戳四舍五入到最接近的 30 分钟?
【发布时间】:2017-12-02 12:28:51
【问题描述】:

我想取一个从 SQL 查询返回的 epoch,然后向上(或向下)取整 30 分钟。我想在第二行代码上执行此操作。知道该怎么做吗?

s = row.get("values")[0][1]
s = <<<round to closest 30 mins>>>
t = datetime.fromtimestamp(float(s)/1000.)
dateFmt = "%Y-%m-%d"
timeFmt = "%H:%M"
date = t.strftime(dateFmt)
time = t.strftime(timeFmt)

【问题讨论】:

  • 除以 30 分钟,四舍五入,然后再乘以 30 分钟。
  • 如果您的输入以秒为单位,那么s = round(s / 60 / 30) * 60 * 30。但是鉴于您的/1000.,也许您有几毫秒?如果是这样,s = round(s/60/30/1000)*60*30*1000.
  • 那行得通!谢谢

标签: python datetime timestamp epoch


【解决方案1】:

首先将数据转换为您期望的表示形式。这可能涉及时区更改。假设t 是你想要的表示,你可以替换你想要的元素:

# python 3
t.replace(minute=t.minute // 30 * 30, second=0, microsecond=0)
# python 2
t.replace(minute=t.minute / 30 * 30, second=0, microsecond=0)

我不会使用评论中关于操纵时间戳本身的解决方案,除非您确定它始终位于本地时区。您可能会遇到奇数分钟轮班问题(+xx30+xx45 时区)

【讨论】:

    猜你喜欢
    • 2011-01-22
    • 2021-12-11
    • 1970-01-01
    • 2011-10-25
    • 2021-11-16
    • 2022-01-02
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    相关资源
    最近更新 更多