我有一个应用程序,每小时接收一个事件(通过石英)。所以这可能每天发生24次。
当天有3个排除时间,当我收到一个事件时,我不想采取任何行动(必须仍然通过quartz接收事件,因此解决方案是不更新quartz cron表达式)
我需要将这3次的时间配置在客户所在的时区。在这种情况下,它将是夏令时(UTC+2)和冬季(UTC+1)。时间是00:00,08:00,16:00在这些时间的两边我有5分钟的缓冲时间。
所以以08:00为例,我在07:55到08:05之间的任何时间收到一个事件,我将不执行任何操作。
我的应用程序将在UTC时间工作,但是排除时间需要在CEST和将来的其他时区配置。
最初的想法是采用当前日期并在UTC中计算出该日期的排除时间,但我认为这种方法会有问题
任何想法?
小心,假设您谈论的是"本地日",在包含夏令时转换的日子里,事件可能每天接收23或25次。不是每一天都有24小时。
还要认识到,有几个时区在午夜有夏令时转换。例如,在巴西,时钟将从2015-10-17 23:59:59
移动到2015-10-18 01:00:00
,完全跳过午夜时间。这一天不存在午夜,所以您必须决定是否让事件在1:00接收,或者根本不接收。
然后在2016-02-20 23:59:59
上,时钟将拨回到2016-02-20 23:00:00
。虽然午夜只存在一次,但延伸到23:55的"窗口"将重复两次。您必须决定是否希望事件能够在两个插槽中接收,或者在第一个插槽中接收,或者在第二个插槽中接收。
提前计算出事件发生的UTC时间的想法有其优点,但关键是递归规则按照本地时间和时区保存,并且您不会丢弃该信息。您很可能需要重新计算特定事件的UTC时间。当政府决定改变其时区的夏令时规则或基本偏移量时,就会发生这种情况。一般来说,任何时候应用时区更新时,都应该考虑所有未来的UTC时间都是可疑的,并重新计算它们。
您可以通过订阅tz公告邮件列表来通知时区更改,然后监控您自己的平台以获取相应的更新。
参见:夏令时和时区最佳实践
和我的答案如何存储重复的日期记住夏令时