java.util.Calendar可以通过方法传递吗?

时间:2011-07-16 18:37:52

标签: java

这是我的代码:

import java.util.Calendar;

import java.util.Locale;

public class test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Calendar a = Calendar.getInstance();
        a.set(Calendar.MONTH, 7);
        a.set(Calendar.YEAR, 2011);
        a.set(Calendar.DAY_OF_MONTH, 16);

        System.out.print(test.getDate(a));
    }

    // What-date calculation
    public static String getDate(Calendar date) {
        //date = Calendar.getInstance();
        return date.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG,
                Locale.getDefault());
    }

}

当我运行此代码时,它会打印“星期二”。但是,我在2011年7月16日运行此代码并取消注释

date = Calendar.getInstance();

因此date将于2011年7月16日完全打印出“星期六”。

我想知道日历对象a是否正确传递,因为a也是在2011年7月16日设置的。 有没有解决方案让我传递Calendar对象并正确打印日期?

提前感谢

3 个答案:

答案 0 :(得分:3)

MONTH从零开始。所以7月是8月。见the docs。为方便起见,Calendar.JULY

答案 1 :(得分:3)

设置日历月份时不要使用“魔术”数字,因为它们基于0(不是基于假设的1)。而是使用Calendar常量,例如Calendar.JULY。

答案 2 :(得分:2)

这很简单 - 日历不使用1索引月份。你将它设置为8月16日。打印Calendar对象的toString(),你会看到。 Calendar提供了您可以使用的常量。

您可能想查看Joda DateTime库,它可以让您更轻松地使用1索引月份并解决许多其他日历问题。