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

Java如何解析带th序数后缀的日期字符串并校验近5分钟时间

带英文序数后缀的日期解析方案

SimpleDateFormat 没有内置支持解析st/nd/rd/th这类英文日期序数后缀,用下面两种方式都可以实现解析,不需要额外引入第三方依赖:

方案1:字符串预处理(最简单,兼容所有Java版本)

解析前先用正则把数字后面的序数后缀移除,再走正常的日期解析逻辑即可,正则可以覆盖所有序数规则(包括1st、2nd、3rd、11th、21st这类特殊后缀):

String rawDateStr = "Jun 8th 2022 16:31:22";
// 正则匹配数字后紧跟的序数后缀,替换为空
String cleanDateStr = rawDateStr.replaceAll("(?<=\\d)(st|nd|rd|th)", "");

// 注意你原来的格式定义有错误,修正后如下:
// DD 是年积日,月份日期用 d;YYYY 是周纪年,公历年用 yyyy;hh 是12小时制,24小时制用 HH
// 解析英文月份必须指定英文Locale,否则非英文环境会解析失败
SimpleDateFormat sdf = new SimpleDateFormat("MMM d yyyy HH:mm:ss", Locale.ENGLISH);
Date parsedDate = sdf.parse(cleanDateStr);

// 后续和当前时间比对差值即可
long diffInMillis = Math.abs(System.currentTimeMillis() - parsedDate.getTime());
boolean isInLast5Minutes = diffInMillis <= 5 * 60 * 1000;

方案2:使用Java 8+ 官方java.time API(推荐)

Java 8 开始内置的java.time包是目前官方推荐的日期时间处理API,线程安全、时间差计算逻辑更清晰,同样搭配预处理正则即可使用:

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Locale;

public class DateCheckDemo {
    public static void main(String[] args) {
        String rawDateStr = "Jun 8th 2022 16:31:22";
        String cleanDateStr = rawDateStr.replaceAll("(?<=\\d)(st|nd|rd|th)", "");
        
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM d yyyy HH:mm:ss", Locale.ENGLISH);
        LocalDateTime parsedTime = LocalDateTime.parse(cleanDateStr, formatter);
        LocalDateTime currentTime = LocalDateTime.now(ZoneId.systemDefault());
        
        // 直接计算分钟差,判断是否在5分钟范围内
        long minuteDiff = Math.abs(ChronoUnit.MINUTES.between(parsedTime, currentTime));
        boolean isInLast5Minutes = minuteDiff <= 5;
    }
}

不推荐为了这个场景引入第三方日期库,也不推荐给DateTimeFormatter写复杂的自定义字段解析逻辑,正则预处理的方式代码量最少、可维护性最高,完全覆盖所有合法的英文日期序数场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 21:24:30