【发布时间】:2021-04-16 16:50:58
【问题描述】:
自纪元以来我有时间,我正在将其转换为日期时间。
import datetime
s = '1346114717'
t = datetime.datetime.fromtimestamp(float(s))
这是正确的吗? t 在哪个时区?如何将其转换为 PST/PDT
【问题讨论】:
自纪元以来我有时间,我正在将其转换为日期时间。
import datetime
s = '1346114717'
t = datetime.datetime.fromtimestamp(float(s))
这是正确的吗? t 在哪个时区?如何将其转换为 PST/PDT
【问题讨论】:
默认情况下,python datetime 是不知道时区的(它没有任何时区信息)。你可以通过使用 pytz 让它知道。但我建议你看看像 arrow 这样的库,它会让事情变得更容易。
【讨论】:
假设您的字符串表示自 1970 年 1 月 1 日以来的 Unix 时间/秒,它指的是 UTC。你可以把它转换成datetimelike
from datetime import datetime, timezone
s = '1346114717'
dt = datetime.fromtimestamp(int(s), tz=timezone.utc)
print(dt.isoformat())
# 2012-08-28T00:45:17+00:00
请注意,如果您不提供时区,则生成的 datetime 对象将是幼稚的,即不“知道”时区。默认情况下,Python 会将其视为本地时间(您机器的操作系统设置)。
要转换为美国/太平洋时间,您可以使用 Python 3.9 标准库中的zoneinfo:
from zoneinfo import ZoneInfo
dt_pacific = dt.astimezone(ZoneInfo('US/Pacific'))
print(dt_pacific.isoformat())
# 2012-08-27T17:45:17-07:00
或者在旧版本的 Python 中使用 dateutil:
from dateutil.tz import gettz # pip install python-dateutil
dt_pacific = dt.astimezone(gettz('US/Pacific'))
print(dt_pacific.isoformat())
# 2012-08-27T17:45:17-07:00
【讨论】:
zoneinfo。另一个 Python 日期时间内置工具。我不知道该怎么想。感谢您添加示例。
zoneinfo 最近由PEP 615 介绍。您还可以通过backports module 将它与旧的 Python 版本一起使用。我认为是时候将时区处理内置到 Python 中了。