如何考虑冬夏令时将瑞士时区日期转换为UTC格式?
瑞士时区(CET/CEST)转UTC格式解决方案
需求说明
需将瑞士本地时间的聊天记录日期转换为UTC格式,自动适配冬夏令时规则:
- 冬季采用CET(UTC+01:00)
- 夏季采用CEST(UTC+02:00)
给定原始日期数据:
import pandas as pd df = pd.DataFrame() df['dates_raw'] = [ '2022-01-20 01:12:15', '2022-06-22 12:00:00', '2022-10-29 05:57:02', '2022-12-18 09:34:17', '2023-01-12 06:36:10', '2023-02-17 20:23:10', '2023-04-12 02:02:24', '2023-09-12 15:57:35', ]
期望转换后的UTC日期:
df['dates_converted'] = [ '2022-01-20 00:12:15', '2022-06-22 10:00:00', '2022-10-29 03:57:02', '2022-12-18 08:34:17', '2023-01-12 05:36:10', '2023-02-17 19:23:10', '2023-04-12 00:02:24', '2023-09-12 13:57:35', ]
解决方案
无需手动维护冬夏令时切换日期,Pandas结合IANA时区数据库可自动处理时区转换。瑞士对应的IANA时区为Europe/Zurich,该数据库已内置所有冬夏令时切换规则,无需手动维护。
完整代码实现
import pandas as pd # 原始数据 df = pd.DataFrame() df['dates_raw'] = [ '2022-01-20 01:12:15', '2022-06-22 12:00:00', '2022-10-29 05:57:02', '2022-12-18 09:34:17', '2023-01-12 06:36:10', '2023-02-17 20:23:10', '2023-04-12 02:02:24', '2023-09-12 15:57:35', ] # 1. 将字符串转为datetime类型 df['datetime'] = pd.to_datetime(df['dates_raw']) # 2. 本地化到瑞士时区,再转换为UTC df['dates_converted'] = df['datetime'].dt.tz_localize('Europe/Zurich').dt.tz_convert('UTC') # 3. 格式化为指定字符串格式(可选,若需保留datetime类型可跳过此步) df['dates_converted_str'] = df['dates_converted'].dt.strftime('%Y-%m-%d %H:%M:%S') # 查看结果 print(df[['dates_raw', 'dates_converted_str']])
代码说明
pd.to_datetime:将原始字符串日期转换为Pandas的datetime对象,为后续时区处理提供基础。dt.tz_localize('Europe/Zurich'):为无时区信息的datetime对象标记瑞士本地时区,自动识别当前时间属于CET还是CEST。dt.tz_convert('UTC'):将瑞士本地时间转换为UTC时间,自动适配冬夏令时的时差差异。dt.strftime:将转换后的UTC datetime对象格式化为与期望结果一致的字符串格式。
结果验证
运行代码后,dates_converted_str列的输出将与给定的期望转换结果完全匹配,无需手动判断切换日期,避免了维护规则的繁琐和人为错误。
内容的提问来源于stack exchange,提问作者plonfat
相关产品推荐
相关产品推荐

