Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果我在UTC时间上加1小时并本地化,或者在本地时间上加1小时,为什么会有不同? 示例代码 观察 预期_Python_Python 3.x_Datetime_Timedelta_Pytz - Fatal编程技术网

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
vs
t12.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