当使用java.util.Date.getTime()方法对java Date对象求和时,我得到了意想不到的结果.
这是示例代码:
System.out.println(d1.toString());
System.out.println(d2.toString());
System.out.println(new Date(d1.getTime() + d2.getTime()));
Run Code Online (Sandbox Code Playgroud)
这是输出:
Mon Mar 20 00:00:00 CET 2017
Thu Jan 01 10:44:00 CET 1970
Mon Mar 20 09:44:00 CET 2017
Run Code Online (Sandbox Code Playgroud)
我希望2017年3月20日10:44:00 CET 2017而不是Mon Mar 20 09:44:00 CET 2017.
我错过了什么?
提前致谢.
让我们忽略这样一个事实,即总结日期完全是胡说八道(日期是时间轴上的一个点 - 添加根本没有为日期定义 - 您可以为日期添加持续时间或总结两个持续时间,但从不两个日期).
问题是你的日期是在欧洲中部时区(CET),所以你提前一小时.
d1.getTime()返回格林威治标准时间 1970年1月1日以来的毫秒数,所以如果你Date在你的时区(我猜想是CET)中为这个日期(1/jan/1970)创建一个新对象,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));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |