Android:使用日历比较2个日期

时间:2014-03-12 11:29:10

标签: java android calendar

我正在尝试比较两个日历实例,但某些内容无法正常工作。我的代码如下:

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在过去的日历中实际上比在当前日历中更高。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

按预期工作。阅读文档。

Android java.util.Calendar看起来表现得与标准Java版本类似。 Java docs say

  

在日历中设置的任何字段值都不会被解释   需要计算其时间值(距离大纪元的毫秒数)或   日历字段的值。调用get,getTimeInMillis,   getTime,add和roll涉及这样的计算。

Android docs say

  

set(f,value)将字段f更改为值。另外,它设置了一个   内部成员变量,表示字段f已更改。   虽然字段f立即更改,但日历的毫秒数   在下次调用get(),getTime()或之前,不会重新计算   getTimeInMillis()成立。因此,对set()的多次调用不会   触发多次不必要的计算。

相关问题