python - 日期时间时区转换添加分钟而不是小时偏移
问题描述
我似乎遇到了一个奇怪的问题。也许这是 Python 中的一个错误,但如果是的话,我会感到惊讶。
我正在尝试通过第一个时区信息将天真的日期时间转换为 UTC:
import datetime
from pytz import timezone
naive_datetime = datetime.datetime.now()
local_datetime = naive_datetime.replace(tzinfo=timezone('Europe/London'))
utc_datetime = local_datetime.astimezone(timezone('UTC'))
print("Naive datetime:", naive_datetime)
print("Local datetime:", local_datetime)
print("UTC datetime: ", utc_datetime)
这是输出:
Naive datetime: 2020-05-14 11:46:44.637956
Local datetime: 2020-05-14 11:46:44.637956-00:01
UTC datetime: 2020-05-14 11:47:44.637956+00:00
请注意,添加“欧洲/伦敦”的“本地时区”会增加 -1 分钟的偏移量,而不是 +1 小时,因为我预期会导致原始时间的“UTC”时间 +1 分钟而不是 -1 小时。
为什么要添加一分钟偏移量,我如何让它达到我的预期?
解决方案
不要replace()
时区,localize()
日期时间对象:
import datetime
from pytz import timezone
# call now() with a tz
local_datetime = datetime.datetime.now(tz=timezone('Europe/London'))
# or localize
naive_datetime = datetime.datetime.now()
tz = timezone('Europe/London')
local_datetime = tz.localize(naive_datetime)
# datetime.datetime(2020, 5, 14, 13, 6, 2, 512100, tzinfo=<DstTzInfo 'Europe/London' BST+1:00:00 DST>)
# now you can use astimezone to change the tz:
utc_datetime = local_datetime.astimezone(timezone('UTC'))
# datetime.datetime(2020, 5, 14, 12, 6, 2, 512100, tzinfo=<UTC>)
注意:如果您在具有 DST 的时区之间进行更改,您可能还必须normalize()
这样做,请参见此处。
推荐阅读
- python - 抓取会跳过一些页面 url,并且不会在 CSV 中写入所有值
- php - CodeIgniter - 问题
tag </ title></h1> <div id="body"><p>Good evening,</p> <p>I have the following situation:</p> <p>I have a login controller, which after registering user data in session variables it - php - 在 Facebook post API PHP 中获取图片
- html - Bash脚本:如何显示某个文件夹的修改日期月份并在此基础上在html文件中排列jpeg
- hadoop - 如何理解 hdfs -du 结果
- typescript - 为什么不能使用 lambda 构造将方法订阅到数据表的单击事件?
- google-chrome - vscode chrome调试器启动启动配置中的webRoot是什么?
- reactjs - JSX 没有返回任何东西
- openshift - 是否可以仅在 Openshift Master 上禁用 CNI?
- angular - 无法在 Mangaeden API Angular 6 中获取图像 url