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

使用Polars解析带时区偏移的字符串时,如何获取解析出的时区偏移?

提取Polars中日期时间字符串的时区偏移并转为Duration列

当使用Polars解析带时区偏移的日期时间字符串时,结果会自动转为UTC时间:

import polars as pl

pl.Series(['2020-01-01T01:00+10:00']).str.to_datetime()

输出:

shape: (1,)
Series: '' [datetime[μs, UTC]]
[
        2019-12-31 15:00:00 UTC
]

这是因为Polars无法存储时区不统一的序列(比如包含夏令时变更的±1、±2偏移),统一转UTC是合理的处理逻辑。但如果需要单独提取并处理时区偏移,可以用以下两种方法:

方法1:Polars原生字符串处理+Duration转换

先通过正则提取偏移部分,再用str.to_duration转为Duration类型:

s = pl.Series(['2020-01-01T01:00+10:00', '2020-01-01T01:00-05:30', '2020-01-01T01:00+02:00'])

# 提取结尾的时区偏移字符串
offset_str = s.str.extract(r'([+-]\d{2}:\d{2})$')

# 转为Duration列
offset_duration = offset_str.str.to_duration("%H:%M")

print(offset_duration)

输出:

shape: (3,)
Series: '' [duration[μs]]
[
        36000000000
        -19800000000
        7200000000
]

正则r'([+-]\d{2}:\d{2})$'精准匹配字符串末尾的±HH:MM格式偏移,str.to_duration会自动识别正负号并转为对应的时长。

方法2:结合chrono库解析偏移

如果你更依赖chrono的解析能力,可以用map_elements调用chrono的FixedOffset来解析偏移字符串,再转为Polars Duration:

from chrono import FixedOffset

s = pl.Series(['2020-01-01T01:00+10:00', '2020-01-01T01:00-05:30'])

offset_duration = s.str.extract(r'([+-]\d{2}:\d{2})$').map_elements(
    lambda x: FixedOffset.parse(x).total_seconds() * 1_000_000,  # 转为微秒
    return_dtype=pl.Duration
)

print(offset_duration)

输出和方法1一致,这种方法适合需要处理chrono支持的非标准偏移格式的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:30:02