Java 日历返回错误的月份和年份

Java 日历返回错误的月份和年份,java,date,calendar,Java,Date,Calendar,程序输出重要信息在caps和新行中: Calendar now = null; now.getInstance(); System.out.println(now.getInstance()); System.out.println(now.ERA); System.out.println(now.YEAR); System.out.println(now.MONTH); System.out.println(now.WEEK_OF_YEA

程序输出重要信息在caps和新行中:

    Calendar now = null;
    now.getInstance();
    System.out.println(now.getInstance());
    System.out.println(now.ERA);
    System.out.println(now.YEAR);
    System.out.println(now.MONTH);
    System.out.println(now.WEEK_OF_YEAR);
    System.out.println(now.WEEK_OF_MONTH);
    System.out.println(now.DAY_OF_MONTH);
    System.out.println(now.DAY_OF_YEAR);
    System.out.println(now.DAY_OF_WEEK);
    System.out.println(now.DAY_OF_WEEK_IN_MONTH);
0-8在新线上 我真的很迷茫,不知道为什么java决定对我玩这个可怕的恶作剧。

这些都是Calendar类中的静态字段。与它对类型名的处理方式相同

java.util.GregorianCalendar[time=1412554865330,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="America/Los_Angeles",offset=-28800000,dstSavings=3600000,useDaylight=true,transitions=185,lastRule=java.util.SimpleTimeZone[id=America/Los_Angeles,offset=-28800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2014,MONTH=9,WEEK_OF_YEAR=41,WEEK_OF_MONTH=2,DAY_OF_MONTH=5,DAY_OF_YEAR=278,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=5,HOUR_OF_DAY=17,MINUTE=21,SECOND=5,MILLISECOND=330,ZONE_OFFSET=-28800000,DST_OFFSET=3600000]

0
1
2
3
4
5
6
7
8
Calendar类提供了获取日期字段值的方法

now.ERA
// is equivalent to
Calendar.ERA
乔达时间 仅供参考,与使用Java.util.Date和Java.util.Calendar类相比,您可能会发现在Java8中使用库或日历类是一种更愉快的体验

Joda Time和java.Time都遵循定义一年中的一周和默认字符串格式

下面是相同类型的代码,但使用的是2.4

转储到控制台

DateTimeZone timeZone = DateTimeZone.forID( "America/Montreal" );
java.util.Locale locale = Locale.CANADA_FRENCH;
DateTimeFormatter formatter = DateTimeFormat.forStyle( "FF" ).withLocale( locale );
DateTime dateTime = DateTime.now( timeZone );
跑步的时候

完整:迪曼奇2014年10月5日美国东部夏令时21时22分 纪元:1 年份:2014年 月份:10 工作周/年:40 月日:5 年份日期:278 星期五:7 时区:美洲/蒙特利尔
如果可以移植到Java8中,我推荐Java8的LocalDateTime和LocalTime类

否则,我建议使用GregorianCalendar cal=new GregorianCalendar


到底是什么问题?你看到了什么你没有预料到的?也许是月值?哦,我知道你有什么问题了。尝试System.out.Printlnow.getCalendar.YEAR;。另外,Calendar now=Calendar.getInstance;。我尝试了多种编写方法,包括Calendar.getInstance.MONTH。但是,您建议的方式会导致NullPointerException。日历现在=空;now.getCalendar.MONTH;因为now为null,但必须初始化才能使用其方法。@davidisher我已经链接了javadoc。不要只是猜测。查看可用的方法并使用它们。我已经提供了一个从Calendar实例获取Month字段的示例。@DavidShier在调用引用之前会初始化引用。我是个白痴。立即按日历初始化=Calendar.getInstance;谢谢你的帮助。
DateTimeZone timeZone = DateTimeZone.forID( "America/Montreal" );
java.util.Locale locale = Locale.CANADA_FRENCH;
DateTimeFormatter formatter = DateTimeFormat.forStyle( "FF" ).withLocale( locale );
DateTime dateTime = DateTime.now( timeZone );
System.out.println( "Full: " + formatter.print( dateTime ) );
System.out.println( "Era: " + dateTime.getEra() ); // 0 (BC/BCE) & 1 (AD/CE).
System.out.println( "Year: " + dateTime.getYear() );
System.out.println( "Month: " + dateTime.getMonthOfYear() );
System.out.println( "WeekOfYear: " + dateTime.getWeekOfWeekyear() ); // Standard ISO 8601 week.
//System.out.println( now.WEEK_OF_MONTH ); // Not in Joda-Time as there is no standard definition for week-of-month.
System.out.println( "DayOfMonth: " + dateTime.getDayOfMonth() );
System.out.println( "DayOfYear: " + dateTime.getDayOfYear() );
System.out.println( "DayOfWeek: " + dateTime.getDayOfWeek() ); // Starts at 1 rather than 0. Amazing!
//System.out.println( now.DAY_OF_WEEK_IN_MONTH ); // Not in Joda-Time as there is no standard definition for week-of-month.
System.out.println( "TimeZone: " + dateTime.getZone() );
cal.get(Calendar.MONTH) for example