Java中如何仅比较ZonedDateTime的时间部分、忽略日期做跨时区校验
实现方案
你不需要定义ZonedDateTime类型的营业时间变量,直接提取转换后EST时间的纯时间部分(LocalTime)和固定的营业时间常量对比即可,这是最简洁的实现方案:
- 先定义EST时区的营业时间常量,
LocalTime本身不包含日期信息,完全符合你忽略日期的需求:
// 定义EST时区营业时间:早8点到晚10点 LocalTime BUSINESS_START = LocalTime.of(8, 0); LocalTime BUSINESS_END = LocalTime.of(22, 0);
- 直接提取你已经转好的EST时区
ZonedDateTime的时间部分做比较:
// 提取转换后时间的纯时间部分(已经是EST时区的时间,不需要再做时区转换) LocalTime startEstTime = startEst.toLocalTime(); LocalTime endEstTime = endEst.toLocalTime(); if(startEstTime.isBefore(BUSINESS_START)){ System.out.println("Business has not opened yet"); } if(endEstTime.isAfter(BUSINESS_END)){ System.out.println("Business has already closed"); }
如果你确实需要按原有思路定义ZonedDateTime类型的营业时间变量,可以复用转换后时间的日期构造同日期的营业时间节点,代码如下:
ZoneId estZone = ZoneId.of("America/New_York"); // 用startEst的日期构造当天EST时区的营业时间节点 ZonedDateTime buisnessStartHoursInEst8am = ZonedDateTime.of(startEst.toLocalDate(), LocalTime.of(8,0), estZone); ZonedDateTime buisnessEndHoursInEst10pm = ZonedDateTime.of(startEst.toLocalDate(), LocalTime.of(22,0), estZone);
注意:该方案仅适用于校验的时间段不跨EST时区午夜的场景,如果存在跨天校验需求,需要额外调整日期逻辑。
内容的提问来源于stack exchange,提问作者WHOATEMYNOODLES
相关产品推荐
相关产品推荐

