如何在Python中找到同一小时的第二天的Unix时间戳,包括DST?

 阿克苏的风格 发布于 2023-02-13 20:55

在Python中,我可以找到当地时间的Unix时间戳,知道时区,就像这样(使用pytz):

>>> import datetime as DT
>>> import pytz
>>> mtl = pytz.timezone('America/Montreal')
>>> naive_time3 = DT.datetime.strptime('2013/11/03', '%Y/%m/%d')
>>> naive_time3
datetime.datetime(2013, 11, 3, 0, 0)
>>> localized_time3 = mtl.localize(naive_time3)
>>> localized_time3
datetime.datetime(2013, 11, 3, 0, 0, tzinfo=)
>>> localized_time3.timestamp()
1383451200.0

到现在为止还挺好.naive_time我不知道时区,而localized_time知道它在2013/11/03 在蒙特利尔的午夜,所以(UTC)Unix时间戳是好的.这个时区也是我当地的时区,这个时间戳似乎是正确的:

$ date -d @1383451200
Sun Nov  3 00:00:00 EDT 2013

现在,时钟在11月3日凌晨2点在蒙特利尔调整了一个小时,所以我们当天增加了一小时.这意味着2013/11/03至2013/11/04之间有25小时.这表明:

>>> naive_time4 = DT.datetime.strptime('2013/11/04', '%Y/%m/%d')
>>> localized_time4 = mtl.localize(naive_time4)
>>> localized_time4
datetime.datetime(2013, 11, 4, 0, 0, tzinfo=)
>>> (localized_time4.timestamp() - localized_time3.timestamp()) / 3600
25.0

现在,我正在寻找一种简单的方法来获取localized_time4对象localized_time3,因为我知道我想在同一时间(这里,午夜)获得下一个本地化的日子.我试过timedelta,但我相信它不知道时区或夏令时:

>>> localized_time4td = localized_time3 + DT.timedelta(1)
>>> localized_time4td
datetime.datetime(2013, 11, 4, 0, 0, tzinfo=)
>>> (localized_time4td.timestamp() - localized_time3.timestamp()) / 3600
24.0

我的目的是获取有关每个本地日的Unix时间戳存储的日志条目的信息.当然,如果我在这里使用localized_time3.timestamp()和添加24 * 3600(它将是相同的localized_time4td.timestamp()),我将错过在localized_time4td.timestamp()和之间发生的所有日志条目localized_time4td.timestamp() + 3600.

换句话说,我正在寻找的功能或方法应该知道何时在Unix时间戳上添加25小时,24小时或23小时,具体取决于DST转换发生的时间.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有