如何从 Unix 纪元时间转换并在 Python 中考虑夏令时?

Posted

技术标签:

【中文标题】如何从 Unix 纪元时间转换并在 Python 中考虑夏令时?【英文标题】:How to convert from Unix epoch time and account for daylight saving time in Python? 【发布时间】:2021-11-08 08:24:45 【问题描述】:

我有一个包含数千条记录的大型数据库。每条记录都包含一个 Unix 纪元时间。

数据库是在单个时区创建的,但该时区有“夏令时”,在此期间本地时间会在几个月内调整一小时。

在 Python 中,我想将所有这些纪元时间转换为该时区的正确本地时间,同时考虑到“夏令时”。我是 Python 新手。

重要提示:有些日期是在“夏令时”记录的,有些日期是在“标准时间”记录的。

目前,我的代码是:

import time
time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time_from_database))

(其中time_from_database是从数据库中获取的Unix纪元时间)

这在 Python 中如何实现?

【问题讨论】:

纪元时间不考虑夏令时;它线性增加。当您从纪元时间转换为特定时区时,将应用 DST 偏移量。如果数据库中的时间针对 DST 进行了调整,则它并不是真正的纪元时间。 @CharlesDuffy 对。数据库中的时间是纪元时间,但我需要将其转换为正确的本地时间,这需要考虑每个日期的 DST(或缺少它)。 【参考方案1】:

操作系统支持时区转换,Python 可以使用它。您无需在 Python 代码中处理它。

您可以使用 pytz 模块来实现它。也最好使用 datetime 对象。

import pytz
from datetime import datetime

MYTZ = "America/Los_Angeles"
TS = 1631491515.6691816

tzinfo = pytz.timezone(MYTZ)

t = datetime.fromtimestamp(TS, tzinfo)
print(t)

2021-09-12 17:05:15.669182-07:00

【讨论】:

谢谢基思! MYTZ 变量是否需要与运行 Python 代码的操作系统所指示的时区字符串相匹配,还是时区名称现在是所有现代操作系统的标准? 名称是标准的。您应该从系统配置中获取它。在 Linux 上,它会有所不同,但通常位于 /etc/timezone

以上是关于如何从 Unix 纪元时间转换并在 Python 中考虑夏令时?的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL:如何从 Unix 纪元转换为日期?

Unix 纪元时间戳在 Python 中转换为 UTC 时区

python iso8601日期格式与unix纪元日期时间之间的转换

如何将 13 位 unix 纪元时间格式转换为日期时间?

如何在 C 中将 10131520 转换为 Unix 纪元时间?

使用 sql 将字符串纪元代码从 unix 时间戳转换为日期