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

Android低版本替代LocalTime实现时间范围判断方案咨询

兼容低版本Android的时段判断方案

要解决API Level <26时无法使用LocalTime的问题,核心思路是把时间字符串转换成一天内的总秒数,通过数值比较来判断当前时间属于哪个时段——这种方式完全依赖基础Java/Android API,没有版本限制。

步骤1:写一个时间转秒数的工具函数

这个函数能处理HH:mm或HH:mm:ss两种格式的时间字符串,将其转换为从0点开始的总秒数:

private static int timeToSeconds(String timeStr) {
    String[] parts = timeStr.split(":");
    int hours = Integer.parseInt(parts[0]);
    int minutes = Integer.parseInt(parts[1]);
    int seconds = parts.length == 3 ? Integer.parseInt(parts[2]) : 0;
    return hours * 3600 + minutes * 60 + seconds;
}

步骤2:重写时段判断逻辑

把原来的LocalTime比较替换成秒数值的比较,同时获取当前系统时间的总秒数(替代原来的硬编码测试值):

public static String in = "7:00:00";
public static String in_until = "11:50:00";
public static String breakout_out = "11:51:00";
public static String breakout_out_until = "12:50:00";
public static String breakout_in = "12:51:00";
public static String breakout_in_until = "13:10:00";
public static String out = "16:50";

public static String getCurrentTimeLogType() {
    // 获取当前时间的总秒数(替代硬编码测试值)
    Calendar calendar = Calendar.getInstance();
    int currentSec = calendar.get(Calendar.HOUR_OF_DAY) * 3600 
                   + calendar.get(Calendar.MINUTE) * 60 
                   + calendar.get(Calendar.SECOND);

    // 把所有时段转换成秒数
    int inSec = timeToSeconds(in);
    int inUntilSec = timeToSeconds(in_until);
    int breakoutOutSec = timeToSeconds(breakout_out);
    int breakoutOutUntilSec = timeToSeconds(breakout_out_until);
    int breakoutInSec = timeToSeconds(breakout_in);
    int breakoutInUntilSec = timeToSeconds(breakout_in_until);
    int outSec = timeToSeconds(out);

    // 数值比较判断时段
    if (currentSec < inSec || (currentSec > inSec && currentSec < inUntilSec)) {
        return "TIME-IN";
    } else if (currentSec > breakoutOutSec && currentSec < breakoutOutUntilSec) {
        return "BREAK-OUT";
    } else if (currentSec > breakoutInSec && currentSec < breakoutInUntilSec) {
        return "BREAK IN";
    } else if (currentSec > outSec) {
        return "TIME-OUT";
    }
    return "UNKNOWN!";
}

注意事项

  • 原逻辑中刚好等于时段边界值(比如刚好是7:00:00或11:50:00)会返回UNKNOWN!,如果需要把边界值划入对应时段,可以把比较符改成>=或<=,比如把TIME-IN的条件改成:
    if (currentSec >= inSec && currentSec < inUntilSec)
    
  • Calendar是Android全版本兼容的API,用来获取当前时间非常可靠。

内容的提问来源于stack exchange,提问作者Gian Lorenzo Abaño

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:26:19