我相信他们应该产生相同的结果。但是,它们会产生以下两个不同的时间值。 2017년 8월 15-6ren">
gpt4 book ai didi

java - 发现 JSTL 时区 (KST) 实现错误

转载 作者:行者123 更新时间:2023-11-30 07:52:35 25 4
gpt4 key购买 nike

在练习 JSTL timeZone 标记时,我尝试运行这两个操作:

<c:set var="now" value="<%= new java.util.Date() %>" />
<fmt:timeZone value="GMT+9:00">
<fmt:formatDate value="${now}" type="both"
dateStyle="full" timeStyle="full"/>
</fmt:timeZone>
<%-- and --%>
<fmt:timeZone value="KST">
<fmt:formatDate value="${now}" type="both"
dateStyle="full" timeStyle="full"/>
</fmt:timeZone>

我相信他们应该产生相同的结果。但是,它们会产生以下两个不同的时间值。

2017년 8월 15일 화요일 오후(PM) 8시 03분 27초 GMT+09:00

2017년 8월 15일 화요일 오전(AM) 11시 03분 27초 GMT

我是否遗漏了什么或实现不正确?如果执行不当,我应该联系谁?

最佳答案

GMT+09:00 不是时区,它是 UTC offset : 与 UTC 的差异(小时、分钟和秒) .它只是表示“比 UTC 提前 9 小时”,它不附属于任何特定的地区或国家。 (不过,大多数系统通常将偏移量视为时区的“特殊类型”,仅到 make things easier )。

KST 是一个 abbreviation for Korea Standard Time , 但不是“真正的”时区。时区名称并没有真正标准化,但许多系统使用 IANA timezones names (始终采用 Region/City 格式,例如 Asia/SeoulEurope/London)。系统通常避免使用短缩写(如 CSTKST),因为它们是 ambiguous and not standard .

时区 Asia/Seoul 今天使用 KST 的缩写,但 Asia/Pyongyang 过去也使用过。不过,它们不是同一个区域。

时区是一个地区在其历史上曾经、曾经和将要拥有的所有不同时差的集合。今天Asia/Seoul使用的是+09:00偏移量,但是Asia/Pyongyang也是过去使用的,所以他们的历史数据不同(这就是为什么它们是不同的区域)。

平壤有+08:30 offset until 1912 ,当更改为 +09:00 时。但在 2015 年它再次更改为 +08:30 并且一直沿用至今。

首尔有一个 different offset history : 它在过去(50 年代)也使用了 +08:30,夏令时(在夏季更改为 +09:30),然后在 1961 年更改为 +09:00,有一段时间有夏令时,今天只使用 +09:00,没有夏令时。

所有这些变化都是由政府和法律定义的,系统无法控制。仅仅因为一个时区(一个地区)今天使用了一些偏移量,不能保证它会永远使用它。因此,尽管 KST 今天可以成为 +09:00 的“同义词”,但这并不意味着它会永远如此。


因此,当您使用 GMT+09:00 时,您只使用偏移量,与特定时区没有任何关联(因为 there are lots of timezones that can use this offset )。

在第二种情况下,日期似乎正在从 KST(offset +09:00)转换为 UTC(偏移量为零,或“GMT”) .请注意,第一种情况是偏移量 +09:00 中的晚上 8 点,第二种情况是 UTC 中的上午 11 点(偏移量为零,或“GMT”),这是正确的。

也许 JSTL 无法识别 KST(因为它有歧义)并默认使用 UTC。我尝试用 Asia/Seoul 替换它,看看会发生什么。

关于java - 发现 JSTL 时区 (KST) 实现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45691812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com