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

使用DateTimeFormatter将多格式日期时间统一转为最长格式MM/dd/yyyy HH:mm:ss a

多格式DateTime统一转换解决方案

现有实现的问题

你的思路核心是对的,用可选模式段匹配多格式输入,但存在3个明显缺陷:

  • 模式定义冲突:带上午/下午标识a的格式串错误使用了24小时制HH,常规场景下a需要搭配12小时制hh使用,否则会出现解析异常(比如13:00搭配PM标识无法匹配)。如果你的输入确实是24小时制带a的特殊场景再调整回HH即可。
  • 缺失默认值配置:仅用可选模式包裹的格式串,解析缺少时间部分的输入(比如yyyyMMdd格式)时,LocalDateTime会因为缺少时分秒字段直接抛出异常,不会自动补0。
  • 缺少输出格式化步骤:当前代码仅完成了字符串到LocalDateTime的解析,没有按照要求把解析后的时间格式化为目标格式的字符串。

修复后的实现方案

我们用DateTimeFormatterBuilder配置缺失字段默认值,同时拆分解析、格式化两个步骤实现需求:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;

// 1. 构建支持多格式的解析器,配置缺失字段默认补0
DateTimeFormatter parseFormatter = new DateTimeFormatterBuilder()
        // 按匹配优先级从高到低添加可选模式
        .appendPattern("[MM/dd/yyyy hh:mm:ss a]")
        .appendPattern("[MM/dd/yyyy HH:mm:ss]")
        .appendPattern("[MM/dd/yyyy HH:mm]")
        .appendPattern("[yyyyMMdd]")
        // 配置缺失时间字段默认值
        .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
        .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
        .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
        .toFormatter();

// 2. 构建目标格式的输出格式化器
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mm:ss a");

// 3. 执行解析+格式化
String input = mm.getManufacturingDate().toString().trim(); // 去除首尾空格避免解析失败
LocalDateTime dateTime = LocalDateTime.parse(input, parseFormatter);
String formattedDate = dateTime.format(outputFormatter);

// 按实际需要的参数类型赋值即可:需要字符串传formattedDate,需要LocalDateTime传dateTime
me.setManufacturingDate(formattedDate);

异常兼容优化

如果输入可能存在空值、完全不匹配的格式,可以加异常处理逻辑:

String formattedDate;
try {
    String input = mm.getManufacturingDate().toString().trim();
    LocalDateTime dateTime = LocalDateTime.parse(input, parseFormatter);
    formattedDate = dateTime.format(outputFormatter);
} catch (Exception e) {
    // 自定义异常处理逻辑,比如设置默认时间或者抛出业务异常
    formattedDate = "01/01/1970 12:00:00 AM";
}
me.setManufacturingDate(formattedDate);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:15:03