Python 如果我在UTC时间上加1小时并本地化,或者在本地时间上加1小时,为什么会有不同? 示例代码 观察 预期
我希望这两者都是我在Python 如果我在UTC时间上加1小时并本地化,或者在本地时间上加1小时,为什么会有不同? 示例代码 观察 预期,python,python-3.x,datetime,timedelta,pytz,Python,Python 3.x,Datetime,Timedelta,Pytz,我希望这两者都是我在t2中看到的。关键的区别在于t2.hourvst12.hour。对于时区感知的datetime对象,我希望小时是本地小时 问题: 我怎样才能改变这种行为?这样做的原因是什么?我不接受以下内容,因为它只解释了如何正确地做。这并不能解释为什么添加timedelta一开始就不能达到预期的效果 如何修复它 建议采取以下方法: from datetime import datetime, timezone, timedelta import pytz # Timezone-aware
t2
中看到的。关键的区别在于t2.hour
vst12.hour
。对于时区感知的datetime对象,我希望小时是本地小时
问题:
我怎样才能改变这种行为?这样做的原因是什么?我不接受以下内容,因为它只解释了如何正确地做。这并不能解释为什么添加timedelta一开始就不能达到预期的效果 如何修复它 建议采取以下方法:
from datetime import datetime, timezone, timedelta
import pytz
# Timezone-aware object to start with
t11 = datetime(1918, 4, 15, 0, 0, tzinfo=timezone.utc).astimezone(pytz.timezone('Europe/Berlin'))
# Extract timezone information
tzinfo = t11.tzinfo
# Convert to UTC, add timedelta, convert to local timezone
t13 = (t11.astimezone(pytz.timezone('utc')) + timedelta(hours=1)).astimezone(tzinfo)
另一种方法是:
t14 = t11 + timedelta(hours=1) # Invalid timezone!
t14 = t14.astimezone(pytz.utc).astimezone(t14.tzinfo) # Fix the timezone
现在我有:
t11: 1918-04-15 01:00:00+01:00
t13: 1918-04-15 03:00:00+02:00 # one hour more and +1h because of DST
钟摆
软件包是修复它的另一种方法:
from pendulum import datetime
from datetime import timedelta
import pytz
t11 = datetime(1918, 4, 15, 0, 0).astimezone(pytz.timezone('Europe/Berlin'))
t12 = t11 + timedelta(hours=1)
t2 = datetime(1918, 4, 15, 1, 0).astimezone(pytz.timezone('Europe/Berlin'))
给出:
t11: 1918-04-15T01:00:00+01:00
t12: 1918-04-15T03:00:00+02:00
t2 : 1918-04-15T03:00:00+02:00
再说一遍,这不是关于图书馆,而是关于德国时间;这就是时钟改变的时间:。如果你不在冬夏两季之间换换环境,你会看到不同的行为。当然。这正是我选择这次的原因。那你为什么不在问题中提及这一点呢?为什么是1918年;今年的变化不会发生吗?你读过吗?@jornsharpe我想很明显,我并不是偶然选择了DST开始的时间。(1918年,因为我在试验时区的旧变化。最初,我想看看pytz是否知道相当旧的变化。参见。
from pendulum import datetime
from datetime import timedelta
import pytz
t11 = datetime(1918, 4, 15, 0, 0).astimezone(pytz.timezone('Europe/Berlin'))
t12 = t11 + timedelta(hours=1)
t2 = datetime(1918, 4, 15, 1, 0).astimezone(pytz.timezone('Europe/Berlin'))
t11: 1918-04-15T01:00:00+01:00
t12: 1918-04-15T03:00:00+02:00
t2 : 1918-04-15T03:00:00+02:00