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

时间:2014-08-13 08:31:25

标签: 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(Calendar.HOUR_OF_DAY) - now.get(Calendar.HOUR_OF_DAY)));

我有时间:image.date = 1407918131283,另一次image.date = 1407925331901。但calendar.get(Calendar.HOUR_OF_DAY)始终返回11。那是为什么?

3 个答案:

答案 0 :(得分:1)

使用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."); 

答案 1 :(得分:0)

        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(1407918131283l);

        System.out.println(cal.getTime().toString());
        System.out.println(cal.get(Calendar.HOUR_OF_DAY));
        cal.setTimeInMillis(1407925331901l);
        System.out.println(cal.getTime().toString());
        System.out.println(cal.get(Calendar.HOUR_OF_DAY));

这里给出了一天中的不同时段。检查您的其他代码。

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

13

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

15

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

答案 2 :(得分:0)

calendar.setTime(new Date(image.date));
double score = calendar.get(Calendar.HOUR_OF_DAY) - now.get(Calendar.HOUR_OF_DAY)));

很难不知道如何以及何时"日历"和"现在"被创造。请注意,您应该使用getInstance()创建日历实例。

即:

Calendar now = Calendar.getInstance();

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

此外,您可以使用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

但更好的是,使用Marcins的回答,JodaTime。它更容易,也没有什么缺陷。