Java的BST ZoneId代表什么?

时间:2017-06-15 14:29:34

标签: java date java-8 timezone localdate

我已在数据库中存储此时间范围:伦敦(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

1 个答案:

答案 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")