【问题标题】:Compute midnight timestamp in UTC +0 using DateTime python 3.5使用 DateTime python 3.5 以 UTC +0 计算午夜时间戳
【发布时间】:2017-07-08 15:03:22
【问题描述】:

我需要使用包含时间戳的 API 查询以固定时间间隔废弃包含 +/- 24 小时数据的在线数据库。因为我不知道服务器在哪里,所以选择像午夜 UTC 这样简单的东西。

我发现了很多关于 SO 的文档来计算本地区域的 UTC。我实际上是在使用这个协议来获取实际的 UTC 日期:

import datetime
myDate = datetime.datetime.now(datetime.timezone.utc) 
print("TZ INFO = ", myDate.tzinfo) # return UTC+00:00
print("DATE ", myDate) # return 2017-07-08 14:14:24.137003+00:00
print("ISO DATE = ", myDate.timestamp()) # return 1499523264.137003

第一个问题,为什么返回的timestamp() 考虑当地时区:1499523264.137003 等于~16h15,所以UTC +2 对应于法国时区。为什么timestamp() 不只返回 UTC + 0 时间戳?如何获得UTC + 0 时间戳?

第二个问题,我尝试生成一个午夜日期来查询 API,所以就像我在 SO 上的许多帖子中看到的那样,我尝试使用 replace() 函数:

myDate = myDate.replace(hour=0, minute=0, second=0,microsecond=0).astimezone(pytz.utc)
print (myDate) # return 2017-07-08 00:00:00+00:00

但是当我尝试 print (myDate.timestamp()) 再次返回 UTC + 2 时间戳时,即 2017 年 7 月 8 日凌晨 2 点。如何轻松获得午夜 UTC + 0 时间戳?

【问题讨论】:

    标签: python python-3.x datetime timestamp utc


    【解决方案1】:

    我建议使用pendulum 模块,因为它可以轻松执行时区和日期计算。

    pendulum 了解夏令时方案,如此处针对伦敦和巴黎所指出的那样。它还可以提供夏令时调整后的 UTC 时间。当您需要对 UTC 进行调整时,只需将 replace 方法与 UTC 结合使用即可。

    >>> import pendulum
    >>> pendulum.create(2017,7,9,0,0,0,0,'Europe/London')
    <Pendulum [2017-07-09T00:00:00+01:00]>
    >>> pendulum.create(2017,7,9,0,0,0,0,'Europe/Paris')
    <Pendulum [2017-07-09T00:00:00+02:00]>
    >>> pendulum.create(2017,7,9,0,0,0,0,'UTC')
    <Pendulum [2017-07-09T00:00:00+00:00]>
    >>> t = pendulum.create(2017,7,9,0,0,0,0,'UTC')
    >>> t.replace(hour=+2)
    <Pendulum [2017-07-09T02:00:00+00:00]>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      相关资源
      最近更新 更多