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

JSP中系统时间与预设时间字符串匹配失败求助

解决JSP中时间字符串匹配失败的问题

嘿,我来帮你搞定这个时间区间匹配的坑!直接用字符串对比时间真的很容易出问题——字符串是按字典顺序比较的,虽然你的场景是22:00到23:59,看似字符串顺序和时间顺序一致,但这种做法既不健壮,也大概率是你逻辑异常的根源。

问题根源

你现在把系统时间转成字符串后直接和预设时间字符串对比,本质上是在比字符的ASCII码顺序,而不是实际的时间先后。比如后续要是调整区间跨天(比如23:00到次日01:00),字符串对比会直接失效;哪怕是当前区间,一旦时间格式出点小问题(比如变成不带前导零的9:00:00而非09:00:00),匹配逻辑就彻底乱了。

正确的解决方案

推荐两种可靠的实现方式,优先选Java 8+的新时间API,简洁又安全:

方案1:Java 8+ LocalTime(强烈推荐)

LocalTime是专门处理时分秒的类,线程安全且API直观,完全避开日期干扰:

// 获取当前时间的时分秒部分
LocalTime currentTime = LocalTime.now();
// 定义预设的时间区间
LocalTime startTime = LocalTime.of(22, 0, 0);
LocalTime endTime = LocalTime.of(23, 59, 59);

// 直接比较时间,包含边界值
boolean isInRange = currentTime.compareTo(startTime) >= 0 && currentTime.compareTo(endTime) <= 0;
// Java 13及以上可以用更简洁的写法:
// boolean isInRange = currentTime.isBetween(startTime, endTime);

if (isInRange) {
    out.println("成功:当前时间处于22:00:00-23:59:59区间内");
} else {
    out.println("错误:当前时间不在目标区间内");
}

方案2:传统Date+Calendar(兼容旧Java版本)

如果项目还在用Java 8之前的版本,就用Calendar剥离日期部分,只比较时分秒:

// 获取当前时间
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");

// 将预设时间字符串转为Date对象
Date startTime = sdf.parse("22:00:00");
Date endTime = sdf.parse("23:59:59");

// 使用Calendar剥离日期部分,避免日期差异影响比较
Calendar calNow = Calendar.getInstance();
calNow.setTime(now);
Calendar calStart = Calendar.getInstance();
calStart.setTime(startTime);

// 把当前时间的年月日设置为和预设时间一致
calNow.set(Calendar.YEAR, calStart.get(Calendar.YEAR));
calNow.set(Calendar.MONTH, calStart.get(Calendar.MONTH));
calNow.set(Calendar.DATE, calStart.get(Calendar.DATE));

Date nowOnlyTime = calNow.getTime();

// 比较时间区间(包含边界值)
if ((nowOnlyTime.after(startTime) && nowOnlyTime.before(endTime)) 
    || nowOnlyTime.equals(startTime) || nowOnlyTime.equals(endTime)) {
    out.println("成功:当前时间处于22:00:00-23:59:59区间内");
} else {
    out.println("错误:当前时间不在目标区间内");
}

为啥原来的字符串对比会错?

举个极端例子:如果系统时间格式意外变成h:mm:ss(不带前导零),比如9:00:00,那字符串"9:00:00"和"22:00:00"对比时,因为'9'的ASCII码比'2'大,会被判定为晚于22:00,这显然完全错误。而用时间对象比较是基于时间的实际数值,根本不会有这类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:17:44