我已在此时间范围内存储在数据库中:从15:00到16:00在伦敦(BST)的任何一天
当我在此时间范围之间收到事件时,我需要执行程序IF。
我现在在巴黎(16:22)进行测试,而伦敦在15:22进行测试(因此介于数据库中存储的时间范围之间)。
所以这是我的代码
// create Local Date Time from what I have stored in the DB
LocalDateTime dateTime1 = LocalDateTime.of(2017, Month.JUNE, 15, 15, 00);
LocalDateTime dateTime2 = LocalDateTime.of(2017, Month.JUNE, 15, 16, 00);
Instant now = Instant.now();
System.out.println (now.isAfter (dateTime1.atZone(ZoneId.of("BST", ZoneId.SHORT_IDS)).toInstant()));
System.out.println (now.isBefore(dateTime2.atZone(ZoneId.of("BST", ZoneId.SHORT_IDS)).toInstant()));
从理论上讲,现在(巴黎的16:22/伦敦的15:22)在伦敦的dateTime1之后(15:00)和伦敦的dateTime2(16:00)之前
但我知道现在不早于dateTime2
最佳答案
如the javadoc of ZonedId.SHORT_IDS
所示,“BST”不是英国夏令时,而是孟加拉国标准时间( Asia/Dhaka
)。
您可以使用以下方法检查值:
System.out.println(ZoneId.of("BST", ZoneId.SHORT_IDS));
因此,我建议使用full time zone names以避免任何混淆:
ZoneId london = ZoneId.of("Europe/London")