繁体   English   中英

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

[英]Android: using Calendar to compare 2 dates

我正在尝试比较日历的两个实例,但某些功能无法正常运行。 我的代码如下:

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

我在这里想念什么?

按预期工作。 阅读文档。

Android java.util.Calendar的行为类似于标准Java版本。 Java文档说

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

Android文档说

set(f,value)将字段f更改为value。 另外,它设置内部成员变量以指示字段f已更改。 尽管字段f立即更改,但是直到下一次调用get(),getTime()或getTimeInMillis()时,日历的毫秒数才重新计算。 因此,对set()的多次调用不会触发多个不必要的计算。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM