gpt4 book ai didi

java - 对 java 日期求和时出现意外结果

转载 作者:行者123 更新时间:2023-12-01 07:01:05 24 4
gpt4 key购买 nike

使用 Java Date 对象的方法 java.util.Date.getTime() 求和时,我得到了意外的结果。

这是示例代码:

System.out.println(d1.toString()); 
System.out.println(d2.toString());
System.out.println(new Date(d1.getTime() + d2.getTime()));

这是输出:

Mon Mar 20 00:00:00 CET 2017
Thu Jan 01 10:44:00 CET 1970
Mon Mar 20 09:44:00 CET 2017

我预计时间为 2017 年 3 月 20 日星期一 10:44:00 CET 2017,而不是 2017 年 3 月 20 日星期一 09:44:00 CET

我错过了什么?

提前致谢。

最佳答案

让我们忽略这样一个事实:对日期求和完全是无意义的(日期是时间轴上的一个点 - 加法根本没有为日期定义 - 您可以向日期添加持续时间或将两个持续时间相加,但是从来没有两个日期)。

问题是您的日期位于欧洲中部时区 (CET),因此比时间早一小时。

d1.getTime() 返回自 1970 年 1 月 1 日 GMT 以来的毫秒数,因此如果您为此日期创建一个新的 Date 对象(1/jan/1970) 在您的时区(我想是 CET),由于时区转换,getTime() 将返回 -3600000。

附加信息

如果您确实想为某个时间点添加持续时间,请考虑使用新的 Java Time API 。它有多种类型来表示日期、时间、日期+时间和持续时间。例如:

LocalDateTime now = LocalDateTime.now();
Duration fiveDays = Duration.ofDays(5);
Period oneYearTwoMonthsThreeDays = Period.of(1, 2, 3);

System.out.println(now);
System.out.println(now.plus(fiveDays));
System.out.println(now.plus(oneYearTwoMonthsThreeDays));

关于java - 对 java 日期求和时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50928418/

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