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

Android中如何比较两个时间?时间区间判断代码咨询

在Android中比较时间的方法及时间区间判断实现

在Android里处理时间比较,我会分两种场景给你说明:传统的兼容方案,以及更推荐的现代API方案,同时帮你完善那个判断时间是否在区间内的函数~

一、传统方案(兼容所有Android版本)

如果你需要兼容Android 8.0以下的版本,可以用SimpleDateFormat和Calendar(或者直接用时间戳比较,更简单)。你给出的函数可以完善成这样,还考虑了跨天时间区间的情况(比如22:00:00到次日06:00:00):

private boolean isBetween(String t1, String t2, String target) {
    boolean result = false;
    try {
        // 注意指定Locale,避免因系统语言差异解析失败
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss", Locale.getDefault());
        
        Date time1 = sdf.parse(t1);
        Date time2 = sdf.parse(t2);
        Date targetTime = sdf.parse(target);
        
        // 转换成毫秒级时间戳,直接比较数值更直观
        long t1Millis = time1.getTime();
        long t2Millis = time2.getTime();
        long targetMillis = targetTime.getTime();
        
        // 分两种情况处理:
        if (t1Millis <= t2Millis) {
            // 正常区间:比如08:00到18:00,目标时间要在两者之间
            result = targetMillis >= t1Millis && targetMillis <= t2Millis;
        } else {
            // 跨天区间:比如22:00到次日06:00,目标时间要么大于等于t1,要么小于等于t2
            result = targetMillis >= t1Millis || targetMillis <= t2Millis;
        }
    } catch (ParseException e) {
        e.printStackTrace();
        // 解析失败时可根据业务需求返回默认值,这里返回false
    }
    return result;
}

二、推荐方案(Android 8.0+ 或引入兼容库)

从Android 8.0(API 26)开始,系统支持Java 8的java.time包,这套API线程安全、用法更简洁。如果要兼容低版本,可以引入ThreeTenABP库(直接在gradle里添加依赖即可)。

用LocalTime(专门处理时分秒的类)实现时间区间判断:

private boolean isBetweenModern(String t1, String t2, String target) {
    try {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
        LocalTime time1 = LocalTime.parse(t1, formatter);
        LocalTime time2 = LocalTime.parse(t2, formatter);
        LocalTime targetTime = LocalTime.parse(target, formatter);
        
        boolean result;
        if (time1.isBefore(time2) || time1.equals(time2)) {
            // 正常区间:目标时间不早于t1,且不晚于t2
            result = !targetTime.isBefore(time1) && !targetTime.isAfter(time2);
        } else {
            // 跨天区间:目标时间不早于t1,或者不晚于t2
            result = !targetTime.isBefore(time1) || !targetTime.isAfter(time2);
        }
        return result;
    } catch (DateTimeParseException e) {
        e.printStackTrace();
        return false;
    }
}

额外注意事项

  • 如果你的时间是带日期的完整时间戳(比如yyyy-MM-dd HH:mm:ss),处理逻辑类似,只需要把对应的类换成Date/Calendar(传统)或者LocalDateTime(现代)即可。
  • 直接比较long类型的时间戳(毫秒数)是最高效的方式,比如如果你的输入已经是long类型,直接按数值比较就行,不用解析成日期对象。
  • 解析时间时一定要指定Locale,否则在部分非中文系统上可能出现解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:07:09