我正在尝试比较两个日历实例,但某些内容无法正常工作。我的代码如下:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Calendar now = Calendar.getInstance();
Calendar past = Calendar.getInstance();
past.set(2014,2,30);
Log.d("ppp",String.valueOf(now.after(past)) +" \n Past: " + past.toString() +" \n Now: "+ now.toString());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
我希望上面的代码返回true,但是看看logCat这就是我得到的:
false
Past: java.util.GregorianCalendar[time=1396174280322,areFieldsSet=true,lenient=true,zone=Europe/Amsterdam,firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2014,MONTH=2,WEEK_OF_YEAR=14,WEEK_OF_MONTH=6,DAY_OF_MONTH=30,DAY_OF_YEAR=89,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=5,AM_PM=1,HOUR=0,HOUR_OF_DAY=12,MINUTE=11,SECOND=20,MILLISECOND=322,ZONE_OFFSET=3600000,DST_OFFSET=3600000]
Now: java.util.GregorianCalendar[time=1394622680322,areFieldsSet=true,lenient=true,zone=Europe/Amsterdam,firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2014,MONTH=2,WEEK_OF_YEAR=11,WEEK_OF_MONTH=3,DAY_OF_MONTH=12,DAY_OF_YEAR=71,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=0,HOUR_OF_DAY=12,MINUTE=11,SECOND=20,MILLISECOND=322,ZONE_OFFSET=3600000,DST_OFFSET=0]
特别是我不明白为什么例如MONTH对于两个对象都是相同的(为什么不是当前的3?)而DAY_OF_YEAR在过去的日历中实际上比在当前日历中更高。
我在这里缺少什么?
答案 0 :(得分:1)
按预期工作。阅读文档。
Android java.util.Calendar看起来表现得与标准Java版本类似。 Java docs say:
在日历中设置的任何字段值都不会被解释 需要计算其时间值(距离大纪元的毫秒数)或 日历字段的值。调用get,getTimeInMillis, getTime,add和roll涉及这样的计算。
set(f,value)将字段f更改为值。另外,它设置了一个 内部成员变量,表示字段f已更改。 虽然字段f立即更改,但日历的毫秒数 在下次调用get(),getTime()或之前,不会重新计算 getTimeInMillis()成立。因此,对set()的多次调用不会 触发多次不必要的计算。