求助:编写Java代码实现特定时段自动将布尔值设为false
实现Java中基于特定时段切换布尔值状态
要解决Clock时间无法用于条件判断的问题,核心是把Clock生成的时间转换为代表一天中具体时刻的格式,再和目标时段做比较,进而切换布尔值状态。以下是修改后的完整实现:
import java.time.Clock; import java.time.Duration; import java.time.LocalTime; import java.time.ZonedDateTime; public class TimeLock { // 遵循Java命名规范,类名首字母大写 public static void main(String[] args) { boolean lock = true; // 默认状态为true,特定时段切换为false Duration myTimeOffset = Duration.ofHours(3); Clock utcClock = Clock.systemUTC(); Clock orderTimeClock = Clock.offset(utcClock, myTimeOffset); // 将Clock转换为带时区的完整时间对象 ZonedDateTime currentTime = ZonedDateTime.now(orderTimeClock); // 提取仅包含时分秒的"一天内时刻",用于时段判断 LocalTime now = currentTime.toLocalTime(); // 定义需要切换lock状态的目标时段(示例为10:00-18:00) LocalTime startTime = LocalTime.of(10, 0); LocalTime endTime = LocalTime.of(18, 0); // 判断当前时刻是否在目标时段内,切换lock状态 if (now.isAfter(startTime) && now.isBefore(endTime)) { lock = false; } System.out.println("当前时间: " + currentTime); System.out.println("Lock状态: " + lock); } }
关键逻辑说明
- 时间格式转换:通过
ZonedDateTime.now(orderTimeClock)直接基于指定Clock生成带时区的时间,再用toLocalTime()提取仅代表一天内时刻的对象,这是实现时段判断的核心。 - 时段判断:使用
LocalTime的isAfter()和isBefore()方法完成区间校验。如果需要包含时段边界(比如刚好10:00或18:00时也切换状态),可以改用compareTo方法:if (now.compareTo(startTime) >= 0 && now.compareTo(endTime) <= 0) { lock = false; } - 跨午夜时段处理:如果目标时段是跨午夜的(比如22:00到次日6:00),判断逻辑需要调整为:
if (now.isAfter(startTime) || now.isBefore(endTime)) { lock = false; }
内容的提问来源于stack exchange,提问作者dataDyne
相关产品推荐
相关产品推荐

