Pandas时间偏移异常:UTC转LST时间计算错误排查与解决
解决UTC转LST时日期解析错误的问题
核心问题是UTC时间字符串被错误解析(把mm-dd-yyyy格式当成了dd-mm-yyyy),导致timedelta计算后日期出错。解决关键是显式指定日期格式,确保datetime对象的正确性。
针对Pandas DataFrame场景(你的代码看起来是处理DataFrame)
- 先将UTC时间字符串列正确转换为datetime类型,显式指定格式:
import pandas as pd from datetime import timedelta # 显式指定格式为mm-dd-yyyy hh:mm,避免自动解析歧义 d['dtime_UTC'] = pd.to_datetime(d['dtime_UTC'], format='%m-%d-%Y %H:%M') # 计算UTC-8的LST时间 d['dtime [LST]'] = d['dtime_UTC'] - timedelta(hours=8) # 可选:如果需要将结果转为指定格式的字符串 d['dtime [LST]'] = d['dtime [LST]'].dt.strftime('%m-%d-%Y %H:%M')
针对普通datetime模块场景
如果是处理单个时间字符串:
from datetime import datetime, timedelta utc_time_str = "01-02-2023 00:02" # 按mm-dd-yyyy hh:mm格式解析 utc_dt = datetime.strptime(utc_time_str, '%m-%d-%Y %H:%M') # 转换为LST(UTC-8) lst_dt = utc_dt - timedelta(hours=8) # 转为目标格式字符串 lst_time_str = lst_dt.strftime('%m-%d-%Y %H:%M')
错误原因说明
当日期字符串包含01-02这类日和月均小于13的内容时,自动解析工具(如pandas的to_datetime)会默认按dd-mm-yyyy格式解析,把1月2日错误识别为2月1日。减8小时后,2月1日00:02变成1月31日16:02,这就是你遇到的错误。显式指定格式可以彻底避免这种歧义。
内容的提问来源于stack exchange,提问作者Kaustubh Pimparkar
相关产品推荐
相关产品推荐

