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

Android中比较两个时间值问题:判断开始时间是否早于结束时间

问题原因及解决方法

问题根源

你用的HH是24小时制的小时格式,它完全不识别AM/PM标记。不管输入是02:00 AM还是02:00 PM,HH都会把小时解析成02,导致两个Date对象的时间部分完全一致,date1.before(date2)自然返回false。

你尝试的HH:mm k、HH:mm a、HH:mm aa都犯了同一个错误:HH是24小时制格式,和AM/PM标记不兼容,解析时会直接忽略AM/PM的信息,最终两个时间被解析成同一个时刻。

正确解决方案

把格式符换成h:mm a:

  • h:12小时制的小时(1-12)
  • a:专门识别上午/下午的标记(AM/PM)

修正后的代码如下:

public static boolean checkTimings(String startTime, String endTime) {
    String pattern = "h:mm a";
    SimpleDateFormat sdf = new SimpleDateFormat(pattern, Locale.US);
    try {
        Date date1 = sdf.parse(startTime);
        Date date2 = sdf.parse(endTime);
        Log.e("date 1 ", date1.toString());
        Log.e("date 2 ", date2.toString());
        if (date1.before(date2)) {
            System.out.println("time1 is before time2");
            return true;
        } else {
            System.out.println("time1 is after time2");
            return false;
        }
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return false;
}

额外优化建议

SimpleDateFormat是线程不安全的类,多线程场景下容易出问题。如果你的项目用的是Java 8及以上版本,更推荐用java.time包下的新API,更安全且逻辑更清晰:

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public static boolean checkTimings(String startTime, String endTime) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("h:mm a", Locale.US);
    try {
        LocalTime time1 = LocalTime.parse(startTime, formatter);
        LocalTime time2 = LocalTime.parse(endTime, formatter);
        return time1.isBefore(time2);
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:35:17