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

Spark:将列中任意格式的时间戳转换为指定标准格式

多格式时间戳转换为统一格式解决方案

Python 实现

针对不确定格式的时间戳,可通过遍历预设格式列表尝试解析,再转换为目标格式:

from datetime import datetime

def standardize_timestamp(input_ts):
    # 列出所有可能的输入格式,可根据实际场景补充
    candidate_formats = [
        "%d-%m-%Y %H:%M:%S.%f",
        "%Y/%m/%d %H:%M:%S.%f",
        "%d/%m/%Y %H:%M:%S.%f",
        "%Y-%m-%d %H:%M:%S.%f"
    ]
    
    for fmt in candidate_formats:
        try:
            dt_obj = datetime.strptime(input_ts, fmt)
            # 转换为目标格式,保留3位毫秒
            return dt_obj.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
        except ValueError:
            continue
    # 所有格式匹配失败时抛出异常,或根据需求返回原字符串
    raise ValueError(f"Unsupported timestamp format: {input_ts}")

# 测试用例
print(standardize_timestamp("05-03-2024 09:15:30.456"))  # 输出 2024-03-05 09:15:30.456
print(standardize_timestamp("2024/03/05 09:15:30.456"))  # 输出 2024-03-05 09:15:30.456

说明:如果有其他输入格式,直接添加到candidate_formats列表即可。转换后的时间戳既可以用字符串做区间比较,也可以保留datetime对象进行更精准的时间运算。

SQL 实现(以MySQL为例)

利用STR_TO_DATE尝试匹配不同格式,再通过DATE_FORMAT转换为目标格式:

SELECT 
    CASE
        WHEN STR_TO_DATE(ts_col, '%d-%m-%Y %H:%i:%s.%f') IS NOT NULL 
            THEN LEFT(DATE_FORMAT(STR_TO_DATE(ts_col, '%d-%m-%Y %H:%i:%s.%f'), '%Y-%m-%d %H:%i:%s.%f'), 23)
        WHEN STR_TO_DATE(ts_col, '%Y/%m/%d %H:%i:%s.%f') IS NOT NULL 
            THEN LEFT(DATE_FORMAT(STR_TO_DATE(ts_col, '%Y/%m/%d %H:%i:%s.%f'), '%Y-%m-%d %H:%i:%s.%f'), 23)
        -- 可继续添加更多格式判断分支
        ELSE ts_col  -- 无法解析时返回原值,或自定义处理逻辑
    END AS standardized_timestamp
FROM your_table;

说明:MySQL的%f会解析微秒(6位),用LEFT(..., 23)截取到3位毫秒,符合目标格式要求。转换后即可直接用于时间区间比较。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:21:22