我已在此时间范围内存储在数据库中:从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")

10-07 19:16