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

如何使用Pandas strftime方法获取带冒号的时区标识

Pandas Timestamp 格式化带冒号的时区字符串问题

问题场景

使用pd.Timestamp.today(tz='Europe/London')生成带时区的时间戳,想要格式化为'2023-12-04 16:08:02+00:00'这种时区部分带冒号的样式,但直接用strftime('%Y-%m-%d %X%:z')会抛出ValueError: Invalid format string,因为Pandas不识别%:z指令。

问题原因

虽然Pandas文档声称支持所有Python原生strftime指令,但实际上Timestamp的strftime方法并未完全兼容Python datetime的扩展格式(比如%:z这种带修饰符的时区格式),其底层实现依赖平台或自身限制,不支持这类语法。

解决方案

方法1:转成Python datetime对象格式化

利用Python原生datetime的strftime支持%:z的特性,先将Timestamp转为datetime对象:

import pandas as pd

ts = pd.Timestamp.today(tz='Europe/London')
formatted_time = ts.to_pydatetime().strftime('%Y-%m-%d %X%:z')
print(formatted_time)

方法2:手动拼接时区部分

先格式化日期时间主体,再处理时区偏移的格式:

import pandas as pd

ts = pd.Timestamp.today(tz='Europe/London')
# 格式化日期时间部分
dt_str = ts.strftime('%Y-%m-%d %X')
# 获取原始时区字符串(如+0000),插入冒号
tz_raw = ts.strftime('%z')
tz_str = f"{tz_raw[:3]}:{tz_raw[3:]}" if tz_raw else ""
# 拼接最终结果
formatted_time = f"{dt_str}{tz_str}"
print(formatted_time)

方法3:使用isoformat方法(最简单)

Pandas的Timestamp自带isoformat方法,指定分隔符为空格后,直接输出符合要求的格式:

import pandas as pd

ts = pd.Timestamp.today(tz='Europe/London')
formatted_time = ts.isoformat(sep=' ')
print(formatted_time)

内容的提问来源于stack exchange,提问作者I hate coding

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:32:17