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

如何在Python中从日期时间字符串推断类型并区分日期、时间、时间戳

自动推断字符串的日期/时间/时间戳类型

我懂你的困扰——用datetime模块时,因为输入格式太杂没法固定解析,导致没法自动区分日期、时间和时间戳。刚好你的需求很明确,咱们可以用按优先级尝试匹配格式的思路解决,直接上干货:

核心思路

得按「范围从大到小」的优先级判断,避免误判:

  1. 先判断时间戳:包含日期+时间(可能带毫秒),如果先判断日期,会把时间戳里的日期部分误判成纯日期
  2. 再判断时间:只有时分秒的字符串
  3. 最后判断日期:只有年月日相关的字符串

可直接运行的代码

from datetime import datetime

def infer_datetime_type(input_str):
    # 先匹配时间戳格式(覆盖带/不带毫秒、两位/四位年份的情况)
    timestamp_patterns = [
        "%y-%m-%d %H:%M:%S",
        "%y-%m-%d %H:%M:%S.%f",
        "%Y-%m-%d %H:%M:%S",
        "%Y-%m-%d %H:%M:%S.%f"
    ]
    for pattern in timestamp_patterns:
        try:
            datetime.strptime(input_str, pattern)
            return "timestamp"
        except ValueError:
            pass
    
    # 接着匹配纯时间格式
    time_patterns = ["%H:%M:%S"]
    for pattern in time_patterns:
        try:
            datetime.strptime(input_str, pattern)
            return "time"
        except ValueError:
            pass
    
    # 最后匹配纯日期格式(覆盖带th后缀、不同顺序的日期)
    date_patterns = [
        "%dth %b %Y",
        "%b %dth %Y",
        "%y-%m-%d",
        "%Y-%m-%d"
    ]
    for pattern in date_patterns:
        try:
            datetime.strptime(input_str, pattern)
            return "date"
        except ValueError:
            pass
    
    # 如果所有格式都不匹配,返回unknown(可根据需求调整)
    return "unknown"

# 测试你的输入列表
input_list = [ "4th Sep 2013", "95-04-04 23:33:05", "May 5th 1999", "03:00:00", "10-01-22", "12-12-25 05:48:01.0010"]
output_types = [infer_datetime_type(item) for item in input_list]
print(output_types)
# 输出正好是你要的: ['date', 'timestamp', 'date', 'time', 'date', 'timestamp']

额外说明

  • 格式可扩展:之后遇到新的日期/时间格式,直接往对应的_patterns列表里加就行,比如要支持中文月份,就加"%Y年%m月%d日"这种格式
  • 模糊格式处理:如果遇到像01-02-03这种可能是日-月-年也可能是月-日-年的模糊格式,你可以根据业务上下文加额外判断逻辑(比如约定年份在后)
  • 异常处理:用try-except捕获strptime的格式不匹配异常,是处理这种多格式场景的标准做法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:57:00