Java 为什么我的日历总是返回当前时间?

Java 为什么我的日历总是返回当前时间?,java,date,datetime,time,calendar,Java,Date,Datetime,Time,Calendar,我有以下代码: Calendar now = Calendar.getInstance(); now.setTime(new Date(System.currentTimeMillis())); Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date(image.date)); double score = calendar.get(C

我有以下代码:

Calendar now = Calendar.getInstance();
            now.setTime(new Date(System.currentTimeMillis()));

            Calendar calendar = Calendar.getInstance();
            calendar.setTime(new Date(image.date));


double score = calendar.get(Calendar.HOUR_OF_DAY) - now.get(Calendar.HOUR_OF_DAY)));

我有一个时间:
image.date=1407918131283
和另一个时间
image.date=1407925331901
。但是
calendar.get(calendar.HOUR/OF\u DAY)
总是返回
11
。为什么会这样?

使用JodaTime进行时间操作。它几乎可以替代有缺陷的内部java类

  final String dateStart = "01/14/2012 09:29:58";
  final String dateStop = "01/15/2012 10:31:48";
  final DateTimeFormatter format = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss");
  final DateTime dt1 = format.parseDateTime(dateStart);
  final DateTime dt2 = format.parseDateTime(dateStop);

  System.out.print(Days.daysBetween(dt1, dt2).getDays() + " days, ");
  System.out.print(Hours.hoursBetween(dt1, dt2).getHours() % 24 + " hours, ");
  System.out.print(Minutes.minutesBetween(dt1, dt2).getMinutes() % 60 + " minutes, ");
  System.out.print(Seconds.secondsBetween(dt1, dt2).getSeconds() % 60 + " seconds."); 
这里给出了一天中不同的时间。检查您的其他代码

2014年8月13日星期三13:52:11

十三,

2014年8月13日星期三15:52:11

十五

注意:在检索一天中的小时之前,请检查您的日历是否设置为正确的时间

在不知道“日历”和“现在”是如何以及何时创建的情况下,这很难做到。请注意,您应该使用创建日历实例

i、 e:

此外,您还可以使用shell检查时间戳:

[~]$ LANG=C date -d @1407925331
Wed Aug 13 12:22:11 CEST 2014
[~]$ LANG=C date -d @1407918131
Wed Aug 13 10:22:11 CEST 2014

但更好的是,用马金斯的回答,JodaTime。它更简单,缺陷更少。

如果您提供一个简短但完整的程序,只演示问题,而不处理其他字段等,则会更容易帮助您。我们还需要知道您的日历所在的时区…已更改。谢谢你的关注这仍然不是一个简短但完整的计划。我希望能够将一个简短但完整的程序复制并粘贴到文本编辑器中,编译它,运行它,并观察问题。也不清楚为什么需要两个日历。
calendar.setTime(new Date(image.date));
double score = calendar.get(Calendar.HOUR_OF_DAY) - now.get(Calendar.HOUR_OF_DAY)));
Calendar now = Calendar.getInstance();

Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date(image.date));
[~]$ LANG=C date -d @1407925331
Wed Aug 13 12:22:11 CEST 2014
[~]$ LANG=C date -d @1407918131
Wed Aug 13 10:22:11 CEST 2014