Python的"astimezone"不确定性行为



考虑使用此lambda函数将ISO日期字符串转换为UTC:

import datetime
iso_to_utc = lambda iso: datetime.datetime.fromisoformat(iso).astimezone(
datetime.timezone.utc
)

它在我的本地python 3.10安装中如预期那样工作:

>>> iso_to_utc('2022-03-24T10:49:45')
datetime.datetime(2022, 3, 24, 6, 49, 45, tzinfo=datetime.timezone.utc)
>>> iso_to_utc('2022-03-24T14:56:05-04:00')  # with UTC offset
datetime.datetime(2022, 3, 24, 18, 56, 5, tzinfo=datetime.timezone.utc)

在上面的两个例子中,前一个例子(没有UTC偏移(在docker容器中运行时返回不同的结果:

>>> iso_to_utc('2022-03-24T10:49:45')
datetime.datetime(2022, 3, 24, 10, 49, 45, tzinfo=datetime.timezone.utc)

造成这种不确定性行为的原因是什么?

注意:我的docker图像是python:3.10-alpine

这种行为的原因是主机和docker容器中的系统时区不同。相关python文档称:

如果self是天真的,则认为它表示系统中的时间时区。

主机的系统时区正确设置为本地时区,而在docker容器中,默认情况下为UTC。因此,由于目标时区和系统时区指向相同的UTC时区,因此docker内部不进行调整。

最新更新