如何在p:calendar组件中更改夏令时(DST)日期

时间:2018-11-05 15:48:37

标签: primefaces calendar timezone dst

我遇到了Primeface 6.0 calendar组件的问题:通常在巴西,我们在10月份应用DST加1h或时钟。今年例外情况是规则有所不同,仅在去年11月4日才进行添加。正如您可能在巴西新闻页面上确认的那样,这引起了许多与应用程序的混淆,其中许多是在正确的11月4日之前的1小时内添加的。错误的日期之一是10月21日。

这导致我正在开发的Web应用程序出现问题。它显示了从数据库中获取的信息,该数据库中填充了来自许多工业设备的数据。在10月21日00:00到01:00,这些设备正确地继续将其数据发送到数据库,该数据库又用这些时间戳填充了正确的表。当在网页内要求查看10月21日00:00-01:00的数据时,就会发生问题:calendar组件错误地返回了这是一个无效的日期时间值,显然是DST情况的一种表现在巴西来过

因此,这里的正确解决方案是“教导” calendar 10月21日00:00到01:00之间的日期时间实际上是有效的日期时间,我的问题是如何执行此操作。我在网站上以红色表示该组件应该填充了从本地服务器/计算机检索到的时区信息,但查看该页面所在的Windows Server时钟,它正确地告知DST + 1h更改是在11月4日。我还查看了java.util.TimeZone的Oracle文档,找不到提及创建有关DST的自定义信息的任何信息。

1 个答案:

答案 0 :(得分:1)

Oracle通过TZUpdater实用程序以及updates to the JRE itself来发布Java的时区更新。

您提到的巴西变化与tzdata 2018c一起发布。从上面链接的图表中,该版本随JRE版本10、8u172、7u181和6u191一起发布。您可以简单地将JRE更新为这些版本之一或更高版本,并且您将获得正确的时区数据。或者,您可以运行TZUpdater并将JRE保持在任何版本。

另一种选择是使用来自Azul Systems的ZIUpdater,它可以在Oracle JRE和OpenJDK以及其他Java实现上使用。