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

带UTC标识的时间字符串转换为[hh:mm:ss]格式的方法咨询

错误根因

你遇到的报错来自两个不匹配的场景:

  • 原始时间字符串末尾带有UTC后缀,你最初使用的格式串%Y-%m-%d %H:%M:%S.%f没有匹配该后缀
  • 移除UTC后缀后,部分时间字符串不存在微秒段(比如报错中的2020-01-29 18:30:28仅精确到秒),格式串中的%f强制要求匹配微秒段,因此仍然报错

最优解决方案

推荐直接使用pandas自带的pd.to_datetime()方法,无需手动编写格式串,可自动兼容带UTC标识、带/不带微秒的时间字符串,同时性能远高于列表推导:

import pandas as pd
from datetime import timedelta

# 转换两列为带时区的datetime类型,自动适配各种格式
df['Date_x'] = pd.to_datetime(df['Date_x'], utc=True)
df['Date_y'] = pd.to_datetime(df['Date_y'], utc=True)

# 直接完成Date_x + 1小时 < Date_y的比较逻辑
df['compare_result'] = df['Date_x'] + timedelta(hours=1) < df['Date_y']

如果需要将时间转换为仅保留hh:mm:ss的字符串格式,可使用dt属性调用strftime:

df['Date_x_hms'] = df['Date_x'].dt.strftime('%H:%M:%S')
df['Date_y_hms'] = df['Date_y'].dt.strftime('%H:%M:%S')

兼容datetime.strptime的方案

如果你坚持要使用datetime库的strptime方法,可通过异常捕获兼容两种格式:

from datetime import datetime as dt

def parse_custom_time(time_str):
    # 移除末尾的UTC后缀
    clean_str = time_str.removesuffix(' UTC').strip()
    try:
        # 优先匹配带微秒的格式
        return dt.strptime(clean_str, '%Y-%m-%d %H:%M:%S.%f')
    except ValueError:
        # 匹配失败则尝试不带微秒的格式
        return dt.strptime(clean_str, '%Y-%m-%d %H:%M:%S')

df['Date_x'] = df['Date_x'].apply(parse_custom_time)
df['Date_y'] = df['Date_y'].apply(parse_custom_time)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:27:01