gpt4 book ai didi

java - 解释 java.util.Date

转载 作者:行者123 更新时间:2023-11-29 07:01:21 25 4
gpt4 key购买 nike

我有一个系统,我可以通过第三方库获取日期。我知道输入的日期是 1914-08-28,我不关心小时和分钟。我需要将此日期传递给客户,其格式应类似于 1914-08-28T00:00。

我从第三方库得到的是一个 java.util.Date,在调试时我偶然发现了一些对我来说看起来很奇怪的东西。
看看下面的图片。我有一个日期,当调用 toString() 时它返回 Thu Aug 27 22:00:00 CET 1914,但是当你查看包含的 cdate 看起来像是在祖鲁时代。

enter image description here

用 DateFormat 格式化它给我1914-08-27T00:00:

java.text.DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'00:00");

我真正期望的是我有一个祖鲁时间日期 (1914-08-27T22:00Z),相当于 1914-08-28T00:00 CET(第二天)。

这可以用下面的代码重现。

Calendar instance.set(1914, 7, 28, 22, 0);
instance.setTimeZone(TimeZone.getTimeZone("CET"));
Date d = instance.getTime();

现在 d 将显示 CET 时间,而 cdate(可见调试)将显示 Zulu 时间,但它们没有区别。如果使用默认时区,我希望 CET 时间与祖鲁时间不同。

这是什么原因?

最佳答案

java.util.Date 不在任何特定时区 - 它只是一个瞬间,在世界各地都有不同的本地时间。

在内部,它是自 Unix 纪元以来的毫秒数,但坦率地说,它可能是不同的表示...虽然我们通常将“Unix 纪元”视为 1970-01-01T00 :00:00Z,你同样可以认为是1970-01-01T01:00:00+01:00...它们代表同一个时间点。

从根本上说,不要再想着 java.util.Date 处于任何时区 - 它不是,而且 toString() 总是只使用系统默认时区,让很多开发者感到困惑。始终使用专用格式化程序(例如 SimpleDateFormat)并指定您感兴趣的时区。

哦,最好改用 java.timeJoda Time ,两者都是更高级的日期/时间 API...

关于java - 解释 java.util.Date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25544586/

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