任何人都可以告诉我这里的代码会给出不同的结果吗?
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(1477785600000l);
cal.add(Calendar.DAY_OF_MONTH, 1);
System.out.println(cal.getTime());
System.out.println(cal.getTimeInMillis());
Calendar cal1 = Calendar.getInstance();
cal1.setTimeInMillis(1477785600000l);
cal1.add(Calendar.HOUR, 24);
System.out.println(cal1.getTime());
System.out.println(cal1.getTimeInMillis());
它在服务器端运行良好,但在Android平台上运行时会产生不同的结果。
答案 0 :(得分:1)
您应该使用Calendar.HOUR_OF_DAY
代替Calendar.HOUR
。
像这样:
cal1.add(Calendar.HOUR_OF_DAY, 23);
答案 1 :(得分:0)
您是否使用相同的日历实例来比较结果的相等性?
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(1477785600000l);
//add 1 day to the date
cal.add(Calendar.DAY_OF_MONTH, 1);
Log.e("first time", "" + cal.getTime());
Log.e("second time", "" + cal.getTimeInMillis());
//reset the calendar to the instance value removing the day added before
cal.add(Calendar.DAY_OF_MONTH, -1); //or you can use cal.setTimeInMillis(1477785600000l);
//add 24 hours to the base calendar value
cal.add(Calendar.HOUR, 24);
Log.e("third time", "" + cal.getTime());
Log.e("fourth time", "" + cal.getTimeInMillis());
我在Android Monitor输出中获得相同的值
E/first time: Mon Oct 31 02:00:00 CET 2016
E/second time: 1477875600000
E/third time: Mon Oct 31 02:00:00 CET 2016
E/fourth time: 1477875600000
答案 2 :(得分:0)
只是托马斯评论的副本。 这是正确的答案,谢谢大家
请记住,1天不一定等于24小时,即涉及夏令时。作为一个例子(不正确,只是为了说明这一点)如果我在10月31日2:00添加1天,我希望在2月1日2:00,但如果我添加24小时并且dst切换发生在那个时候我可以在3月3日(或左右)获得。 - 我的意思是,如果你在“day”字段中添加1,则小时不会更改,但如果在“小时”字段中添加24,则可以计算当天(翻转),其中可能包括dst。
答案 3 :(得分:-1)
请查看Cal.add()方法。在第一个实例中,您添加月份,在第二个实例中,您添加小时。改变它们,它会正常工作。
请参阅文档链接:https://developer.android.com/reference/java/util/Calendar.html#getDisplayNames(int,int,java.util.Locale)
您需要使用HOUR_OF_DAY 24小时格式。小时是用于12小时制(0 - 11)。中午和午夜由0表示,而不是12表示。例如,在10:04:15.250 PM,HOUR是10而不是22。