You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Polars中将Date类型转换为时区感知的Datetime类型

解决方案:将Polars Date类型本地化到指定时区并转为Datetime

直接使用cast(pl.Datetime(time_zone='America/New_York'))转换Date类型时,Polars会先将Date转为UTC时区的当日0点,再转换到目标时区(纽约时区比UTC晚5小时,因此出现前一天19点的结果)。要实现将Date视为目标时区的当日0点并转为带时区的Datetime,需按以下步骤操作:

正确代码示例

import polars as pl

df = pl.DataFrame({
    "date": pl.Series(["2022-01-01", "2022-01-02"]).cast(pl.Date)
})

# 先转为无时区的Datetime(对应当日00:00:00),再本地化为目标时区
result = df.select(
    pl.col('date')
    .cast(pl.Datetime())
    .dt.replace_time_zone('America/New_York')
)

print(result)

输出结果

shape: (2, 1)
┌────────────────────────────────┐
│ date                           │
│ ---                            │
│ datetime[μs, America/New_York] │
╞════════════════════════════════╡
│ 2022-01-01 00:00:00 EST        │
│ 2022-01-02 00:00:00 EST        │
└────────────────────────────────┘

补充说明

  • Polars的时区转换逻辑不依赖系统环境变量TZ,因此修改os.environ['TZ']不会改变转换结果,必须通过显式的方法参数指定时区。
  • 使用dt.replace_time_zone时,Polars会将无时区的Datetime直接视为目标时区的时间,而非先当作UTC转换,这正是我们需要的本地化逻辑。

内容的提问来源于stack exchange,提问作者Dean MacGregor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:35:25