任何人都可以请帮助我了解为什么我对获得不同的月份值
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
System.out.println(dateFormat.format(cal.getTime())
+ "--"
+ cal.get(Calendar.MONTH));
令人惊讶的显示器
09/09/2012--8
在Calendar
类, MONTH
从指数开始0
。 因此, January
是0, February
是1,因此September
是8。
PS: -这是真的,这是一个Inconsistency
的Calendar
类,所以我建议你看看Joda-Time API
使您的生活更容易使用日期时间数据工作时。
你可能的问题是日历使用几个月从零开始的索引 。 所以,正确的格式输出9
九月,但吸气返回8
。
这是愚蠢和日历的不一致? 是! 使用乔达时API的使用日期和时间,而不是工作。 据我所知,这是目前的事实标准,直到JSR 310恶有恶报。
基于0的Calendar.MONTH返回值即JANUARY被表示为0。这样,SEPTEMBER是8。
其他的答案是正确的。 java.util.Calendar类使用了一个月的数字从零开始计数。 其中的原因是多方面的,以避免使用java.util.Date/Calendar类。
这种工作是比较容易乔达时间 2.3库。 值得庆幸的是它明智使用基于一个计数如一月= 1,十二月= 12。
java.util.Calendar cal = java.util.Calendar.getInstance();
// Though not required here for this one purpose, it's better to specify a time zone than rely on default.
DateTimeZone timeZone = DateTimeZone.forID( "America/Montreal" );
DateTime dateTime = new DateTime( cal.getTime(), timeZone );
// Extract month. Note how these two lines call similar sounding methods that are actually quite different.
// One returns a primitive int value. The other returns an object of nested class DateTime.Property.
int monthNumber = dateTime.getMonthOfYear();
String monthName = dateTime.monthOfYear().getAsText( Locale.FRENCH );
转储到控制台...
System.out.println( "dateTime: " + dateTime );
System.out.println( "monthNumber: " + monthNumber );
System.out.println( "monthName: " + monthName );
当运行...
dateTime: 2014-02-10T02:58:35.386-05:00
monthNumber: 2
monthName: février