Python:如何在不知道 DST 是否生效的情况下将时区感知时间戳转换为 UTC

标签 python datetime dst pytz

我正在尝试将始终为太平洋时间的天真时间戳转换为 UTC 时间。在下面的代码中,我可以指定我拥有的这个时间戳是太平洋时间,但它似乎不知道它应该是距 UTC 的 -7 小时的偏移量,因为它只有 10/21 并且 DST 有还没有结束。

脚本:

import pytz
import datetime
naive_date = datetime.datetime.strptime("2013-10-21 08:44:08", "%Y-%m-%d %H:%M:%S")
localtz = pytz.timezone('America/Los_Angeles')
date_aware_la = naive_date.replace(tzinfo=localtz)
print date_aware_la

输出:

    2013-10-21 08:44:08-08:00

在 DST 于 11 月 3 日结束之前,它的偏移量应为 -07:00。当 DST 生效和未生效时,如何让我的时区感知日期具有正确的偏移量? pytz 是否足够聪明,知道 DST 将于 11 月 3 日生效?

总体目标:我只是想将时间戳转换为 UTC,因为我知道我将在太平洋时间获得一个时间戳,而没有任何迹象表明 DST 是否有效。我不是从 python 本身生成这个日期,所以我不能只使用 utc_now()。

最佳答案

使用localize方法:

import pytz
import datetime
naive_date = datetime.datetime.strptime("2013-10-21 08:44:08", "%Y-%m-%d %H:%M:%S")
localtz = pytz.timezone('America/Los_Angeles')
date_aware_la = localtz.localize(naive_date)
print(date_aware_la)   # 2013-10-21 08:44:08-07:00

这在 the pytz documentation 的“示例和用法”部分中有介绍。 .

然后继续UTC:

utc_date = date_aware_la.astimezone(pytz.utc)
print(utc_date)

关于Python:如何在不知道 DST 是否生效的情况下将时区感知时间戳转换为 UTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19527351/

相关文章:

sql-server - 确定sql server中的远程夏令时

c# - .NET TimeZone.CurrentTimeZone.GetDaylightChanges 返回错误的 2005 夏令时

python - Scrapy - "scrapy crawl"在内部捕获异常并将其隐藏在 Jenkins 的 "catch"子句中

Python 具有条件的数据帧的聚合总和

python - 使用 pandas to_datetime 版本 0.23.4 获取今天的日期

c# - 在 .net 核心中设置全局时区

php - 夏令时变化时,filemtime 可以与 strtotime 进行比较吗?

Python 脚本 http 请求在本地工作,但在作为 Google Cloud Function 进行测试时不工作

python - 如何在 Julia 中使用 Python 函数?

Python 3 打印日期时间日期为 1900?