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

Posted

技术标签:

【中文标题】如何更改 p:calendar 组件中的夏令时 (DST) 日期【英文标题】:How to change the daylight savings (DST) date in p:calendar component 【发布时间】:2019-04-09 00:09:15 【问题描述】:

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

这导致我正在开发的网络应用出现问题。它显示了从数据库中获取的信息,该数据库中充满了来自许多工业设备的数据。在 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 Docs,找不到任何提及创建有关 DST 的自定义信息。

【问题讨论】:

【参考方案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 实现。

【讨论】:

以上是关于如何更改 p:calendar 组件中的夏令时 (DST) 日期的主要内容,如果未能解决你的问题,请参考以下文章

正确更改 Windows 上的文件时间戳?

如何在android中检测夏令时转换

使用 p:calendar 相互限制开始和结束日期时间(无验证)

Ruby/Rails 中的夏令时开始和结束日期

如何在 JS 中更改日期格式

PHP 时区问题 |英国夏令时和格林威治标准时间