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
相关产品推荐
相关产品推荐

