Supporting recurring events across time zones and daylight savings changes
建立了一个基本系统,允许用户在某个日期/时间安排与A、B、C个人的会议。
我想检查一下我们的解决方案是否能在DST变更中起作用。
这两个关键类是:
User —持有用户的ZoneId ,所以Europe/Paris 、Asia/Tokyo 等。Event 持有预定事件的LocalDateTime ,如事件创建时用户的2018-05-04T10:00:00.000 和ZoneId ,如Europe/Paris 。
然后我们将事件放入调度程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import org.springframework.scheduling.TaskScheduler; import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; import java.util.Date; public class MyScheduler { private final TaskScheduler executor; ... public void schedule(Event event) { ... ZonedDateTime scheduledAt = ZonedDateTime.of(event.getScheduledAt(), event.getScheduledAtTimeZone()); if (scheduledAt.isAfter(ZonedDateTime.now(ZoneId.systemDefault()))) { executor.schedule(task, Date.from(scheduledAt.toInstant())); } } } |
如果我是正确的,那么上面的代码应该启动设置为星期五上午10点的事件
上面的方法看起来正常吗?
我还注意到,
在这种情况下,存储偏移量的系统有什么好处吗,或者我们只使用本地事件时间和创建偏移量的区域吗?
我能想到的唯一真正的问题是,在秋天,当时钟向后移动时,事件发生在角落的情况下,那么