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

Java中如何裁剪字符串以便使用SimpleDateFormat解析时间?

实现方案

核心思路是先用正则匹配所有符合「1~2位数字+冒号+2位数字」格式的候选子串,再通过SimpleDateFormat严格校验筛选出合法的时间片段,避免匹配到25:61这类格式正确但逻辑不合法的内容。

完整可运行代码

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TimeExtractor {
    public static void main(String[] args) throws ParseException {
        String wholeString = new String("The time is 7:00.");
        // 裁剪字符串的核心逻辑
        Pattern timePattern = Pattern.compile("\\d{1,2}:\\d{2}");
        Matcher matcher = timePattern.matcher(wholeString);
        String timeOnlyString = "";
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
        // 开启严格解析,避免25:00这类非法时间被误判
        sdf.setLenient(false);
        while (matcher.find()) {
            String candidate = matcher.group();
            try {
                // 校验是否为合法时间
                sdf.parse(candidate);
                timeOnlyString = candidate;
                break;
            } catch (ParseException ignored) {
                // 非法候选直接跳过
            }
        }
        // 后续原有逻辑
        Date timeAsObject = sdf.parse(timeOnlyString);
        String timeAsString = sdf.format(timeAsObject);
        System.out.println(timeAsString);
    }
}

说明

  • 正则\d{1,2}:\d{2}会优先匹配所有形如7:00、07:00、23:59的候选串
  • 调用sdf.setLenient(false)关闭宽松解析,确保只有00:00~23:59范围内的时间会被提取
  • 提取到的1位小时时间(如7:00)在经过HH:mm格式格式化后,会自动补前导零输出为07:00,符合预期结果
  • 如果需要提取字符串中所有符合要求的时间片段,可将匹配到的合法candidate存入列表即可,当前逻辑默认取第一个匹配的合法时间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:09:01