NumPy - 时区处理
NumPy 中的时区处理
NumPy 中的时区处理允许您管理不同时区之间的 datetime 数据。这在处理全球时间相关数据时非常重要,例如股票市场时间戳、天气数据或国际事件,需要进行时区转换以进行准确分析。
虽然 NumPy 不像某些其他库(如 'pytz' 或 'pandas')那样内置支持时区,但它允许您处理 datetime 对象,并且您可以使用外部库如 'pytz' 进行时区转换。
NumPy 的 datetime64 对象是 timezone-naive 的,即它们不存储时区信息,但您可以使用兼容工具手动调整它们。
使用 'datetime64' 处理时区
默认情况下,NumPy 中的 'datetime64' 对象是 timezone-naive 的,即它们不存储时区信息。如果需要显式处理时区,您需要将 NumPy 与 'pytz' 或 Python 'datetime' 模块中的 'timezone' 等库结合使用。
要转换时区或处理时区感知的 datetime 数据,您可以结合外部工具与 NumPy 数组来管理不同时区之间的 datetime 转换和对齐。
示例
在以下示例中,我们将 NumPy 与 'pytz' 库结合使用来处理时区转换。首先,我们使用 NumPy 创建一个 datetime 数组,然后将 datetime 调整到不同的时区 −
import numpy as np
import pytz
from datetime import datetime
# 定义一个 datetime 数组
dates = np.array(['2024-01-01T12:00', '2024-01-02T12:00'], dtype='datetime64[m]')
# 转换为 Python datetime 对象
# 使用 astype('O') 将 datetime64 转换为 datetime 对象
dt_objects = [d.item() for d in dates]
# 使用 pytz 定义时区
timezone = pytz.timezone('US/Eastern')
# 将每个 datetime 转换为新时区
localized_dates = [timezone.localize(dt) for dt in dt_objects]
# 打印本地化时间
for date in localized_dates:
print(date.strftime('%Y-%m-%d %H:%M:%S %Z%z'))
输出将显示转换为东部时区 (ET) 的 datetime 值 −
2024-01-01 12:00:00 EST-0500 2024-01-02 12:00:00 EST-0500
时区之间的转换
在处理 datetime 数据时,时区之间的转换通常是必要的。这可以使用外部库如 'pytz' 完成。在创建时区感知的 datetime 对象后,您可以使用 astimezone() 方法轻松将其转换为另一个时区。
示例
在以下示例中,我们首先将 datetime 对象转换为东部标准时间 (EST),然后转换为太平洋标准时间 (PST) −
import pytz
from datetime import datetime
# 创建一个 datetime 对象
dt = datetime(2024, 1, 1, 12, 0, 0)
# 定义时区(东部时区)
eastern = pytz.timezone('US/Eastern')
# 将 datetime 本地化为东部时间
localized_dt = eastern.localize(dt)
# 转换为太平洋时区
pacific = pytz.timezone('US/Pacific')
pacific_dt = localized_dt.astimezone(pacific)
print("Eastern Time: ", localized_dt.strftime('%Y-%m-%d %H:%M:%S %Z%z'))
print("Pacific Time: ", pacific_dt.strftime('%Y-%m-%d %H:%M:%S %Z%z'))
执行上述代码后,您将得到以下输出 −
Eastern Time: 2024-01-01 12:00:00 EST-0500 Pacific Time: 2024-01-01 09:00:00 PST-0800
数据中对齐时区
在处理数据中的多个时区时,对齐不同时区的 datetime 数据非常重要。您可能需要将所有 datetime 转换为一个共同的时区(例如 UTC),以确保准确的比较和计算。
您可以通过将每个 datetime 对象转换为目标时区,来对齐带有时区感知的 datetime 到一个共同的时区。这可以使用相同的 'pytz' 库或 'datetime' 模块进行调整。
示例
在这个示例中,我们将来自不同时区的两个 datetime 对象对齐到 UTC −
import pytz
from datetime import datetime
# 创建两个不同时区的 datetime 对象
dt1 = datetime(2024, 1, 1, 12, 0, 0, tzinfo=pytz.timezone('US/Eastern'))
dt2 = datetime(2024, 1, 1, 12, 0, 0, tzinfo=pytz.timezone('US/Pacific'))
# 将两个 datetime 转换为 UTC
dt1_utc = dt1.astimezone(pytz.utc)
dt2_utc = dt2.astimezone(pytz.utc)
# 在 UTC 中打印两个 datetime 对象
print("Eastern to UTC: ", dt1_utc.strftime('%Y-%m-%d %H:%M:%S %Z%z'))
print("Pacific to UTC: ", dt2_utc.strftime('%Y-%m-%d %H:%M:%S %Z%z'))
输出将显示两个 datetime 已对齐到 UTC −
Eastern to UTC: 2024-01-01 16:56:00 UTC+0000 Pacific to UTC: 2024-01-01 19:53:00 UTC+0000