Java 日历返回错误的月份和年份
程序输出重要信息在caps和新行中: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
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