gpt4 book ai didi

java - 1º 夏令时 Java 和 JS 表现出不同的行为

转载 作者:行者123 更新时间:2023-11-29 22:19:53 25 4
gpt4 key购买 nike

假设巴西利亚 GMT -0300:夏令时 21/10/2012 00:00:00,此时时钟应提前一小时

Java

new Date(2012 - 1900, 9, 21, 0, 0, 0)
Sun Oct 21 01:00:00 BRST 2012

Chrome/FireFox(控制台)

new Date(2012, 9, 21, 0, 0 ,0)
Sat Oct 20 2012 23:00:00 GMT-0300 (Hora oficial do Brasil)

Java 中的结果是我所期望的,但 JS 中的结果我无法理解。我找到了这个 post比约恩德说

This is an absolutely correct behavior

但没有解释为什么这种行为是可以的。

我的问题是:

为什么 JS 返回过去一小时的日期?

附言我知道 Date 被标记为“弃用”,但我使用的是 GWT;约会是我唯一的选择。

最佳答案

基本上,据我所知,这个答案是不正确的。我什至对 Java 版本也不完全满意。

从根本上说,您正在尝试构建一个从未发生过的本地日期/时间。从本地时间转换为 UTC 总是很棘手,因为存在三种可能性:

  • 明确的映射,在大多数时区,每年只有两个小时除外
  • 模糊映射,在向后转换期间,同一本地时间段出现两次(例如,本地时间为 12:59am、1am、... 1:59am、1am、1:59am、凌晨 2 点)
  • “间隙”映射,本地时间段根本不存在(例如,本地时间为凌晨 12:59、凌晨 2 点、凌晨 2:01)

巴西在午夜将时钟拨快,因此本地时间实际上是:

October 20th 11:58pm
October 20th 11:59pm
October 21st 01:00am
October 21st 01:01am

您要求的本地时间根本就没有发生过。看起来 Java 只是假设你想将它向前滚动......而 JavaScript 变得困惑 :( 如果你在 2013 年 2 月 16 日开始的午夜要求 JavaScript 结果会更容易理解(但仍然不正确),因为示例 - 时钟将回到 15 日晚上 11 点。16 日凌晨 12 点是明确的,因为它只能在 15 日“第二个”晚上 11 点至 11:59 之后发生。

一个好的日期/时间 API(在我非常有偏见的观点中)会迫使你说出你希望如何在进行转换时发生歧义和间隙。

关于java - 1º 夏令时 Java 和 JS 表现出不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13048281/

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