0

当我想在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

哪个是对的

谁能解释我为什么?

4

1 回答 1

2

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

强烈建议所有这些都使用Joda Time。然后,您可以从 aLocalDate和开始LocalTime,将它们组合成 a LocalDateTime,然后确定是否要应用特定时区。

使用正确的数据类型,这正是你想要传达的意思,对日期/时间工作有很大的影响。

于 2013-11-07T11:50:12.253 回答