我有这段代码:
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
。那是为什么?
答案 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。它更容易,也没有什么缺陷。