日历不按预期工作

时间:2015-06-19 16:37:08

标签: java android

我正在使用Calendar API,但我认为我做错了

    Calendar cal = new GregorianCalendar(TimeZone.getDefault());
    cal.add(Calendar.YEAR, 2015);
    cal.add(Calendar.MONTH, 6);
    cal.add(Calendar.DAY_OF_MONTH, 20);
    cal.add(Calendar.HOUR, 19);
    cal.add(Calendar.MINUTE, 0);

    Log.d("TAG", cal.getTime().toString());

为什么我会得到这个值?

D/TAG﹕ Thu Jan 09 13:24:24 CEST 4031

2 个答案:

答案 0 :(得分:3)

您正在呼叫add,而不是set,因此您要将2015年,6个月等添加到已经Calendar的对象中初始化到现在(2015年6月19日)。

请致电set。不要忘记从基于0的月份中减去一个,或者您将获得7月而不是6月。

Calendar cal = new GregorianCalendar(TimeZone.getDefault());
cal.set(Calendar.YEAR, 2015);
cal.set(Calendar.MONTH, 5);  // 5 is June because 0 is January
cal.set(Calendar.DAY_OF_MONTH, 20);
cal.set(Calendar.HOUR, 19);
cal.set(Calendar.MINUTE, 0);

答案 1 :(得分:0)

通过使用add,您实际上可以获得比现在更短的2015年,6个月,20天和19个小时的日历实例。而是使用constructor

Calendar cal = new GregorianCalendar(2015, 5, 20, 19, 0);

并且不要致电add

或者,您可以使用set代替添加:

cal.set(Calendar.YEAR, 2015);
cal.set(Calendar.MONTH, 5);  // 0-based
cal.set(Calendar.DAY_OF_MONTH, 20);
cal.set(Calendar.HOUR, 19);
cal.set(Calendar.MINUTE, 0);
相关问题