【问题标题】:wrong time calculating in Java用Java计算错误的时间
【发布时间】:2013-11-07 11:43:46
【问题描述】:

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


【解决方案1】:

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

强烈推荐使用Joda Time 来完成所有这些操作。然后您可以从LocalDateLocalTime 开始,将它们组合成LocalDateTime,然后确定是否要应用特定时区。

使用正确的数据类型(这正是您想要传达的意思)对日期/时间工作产生了巨大的影响。

【讨论】:

    猜你喜欢
    • 2012-03-15
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 2015-03-07
    • 2018-06-09
    • 1970-01-01
    相关资源
    最近更新 更多