java - Java中的时间计算错误

标签 java date sum

当我想在 java 中对两个日期求和时,它不起作用:

System.out.println(date + " <---- date");
System.out.println(time + " <---- time");
System.out.println(new Date(date.getTime() + time.getTime()) + " <---- new Date(time.getTime() + date.getTime())");

导致以下输出:

Wed Nov 06 00:00:00 CET 2013 <---- date
Thu Jan 01 11:51:14 CET 1970 <---- time
Wed Nov 06 10:51:14 CET 2013 <---- new Date(time.getTime() + date.getTime())

...但是如果我使用Calender,它就可以工作!

  Calendar calendar = Calendar.getInstance();
  calendar.setTime(time);
  int hour = calendar.get(Calendar.HOUR_OF_DAY);
  int min = calendar.get(Calendar.MINUTE);

  calendar.setTime(date);
  calendar.set(Calendar.HOUR_OF_DAY, hour);
  calendar.set(Calendar.MINUTE, min);
  calendar.set(Calendar.SECOND, 0);
  calendar.set(Calendar.MILLISECOND, 0);

  Date myDate = calendar.getTime();
  System.out.println(myDate);

结果

Wed Nov 06 11:51:00 CET 2013

正确的是

谁能解释一下为什么吗?

最佳答案

从根本上来说,您遇到了时区问题。事实上,您使用 java.util.Date 来表示一天中的某个时间,这一事实一开始就让您感到困惑。您的时间 11:51:14 CET 实际上是 10:51:14 UTC,因此当您添加调用 time.getTime() 的结果时,您仅添加“不到 11 小时”而不是“不到12小时”。使用不适当的数据类型使得所有这些都难以使用和理解。

强烈建议使用 Joda Time对于这一切。然后,您可以从 LocalDateLocalTime 开始,将它们组合成 LocalDateTime,然后确定是否要应用特定时区。

使用正确的数据类型(这正是您想要传达的内容)会给日期/时间工作带来巨大差异。

关于java - Java中的时间计算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19835041/

相关文章:

java - 如何使用谷歌的gson库

django - 为 Django DateField 和 Postgresql 指定默认值

c - 在 C 中使用 Malloc 添加两个数组 HW

java - CSV 到平面 xml java 程序

java - 如何通过java实现和使用命令提示符命令并在java中查看结果?

mysql - 具有唯一 ID 的高级平均日期差异

algorithm - 计算具有大量被加数的和

sql - PostgreSQL 8.4 : Summation by account numbers

java - 有没有一种工具可以代替来回传递 Excel 文件并合并它们?

java - 在安卓上崩溃