我已在数据库中存储此时间范围:伦敦(BST)15:00至16:00的任何一天
当我在此时间段之间收到一个事件时,我需要执行一个程序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)在伦敦(15:00)的dateTime1之后和伦敦的dateTime2(16:00)之前
但我现在不是那个dateTime2
答案 0 :(得分:10)
如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")