我对对象日历进行了测试:
for (int i = 0; i < 11; i++)
System.out.println(calendar.get(i));
output:
1
2011
6
28
2
6
187
4
1
1
10
我的问题是这怎么可能发生? api calendar.get()
也存在同样棘手的问题答案 0 :(得分:4)
在Calendar.get(i)
i
代表ERA
,YEAR
,MONTH
等字段。
例如,calendar.get(1)
与calendar.get(Calendar.YEAR)
相同,依此类推。
答案 1 :(得分:2)
我看不出问题所在。 documentation表示您获得了您提供的任何字段ID的特定值。
您通常会使用字段常量来获取特定值(例如DAY_OF_MONTH
或MONTH
,但只要它在0..FIELD_COUNT
范围内,任何整数都会起作用。
字段ID已记录here(虽然将来可能会更改),因此您的具体值为:
ID Value Description
-- ----- -----------
0 1 Era (BC/AD for Gregorian).
1 2011 Year.
2 6 Month (zero-based).
3 28 Week-of-year.
4 2 Week-of-month.
5 6 Date/day-of-month.
6 187 Day-of-year.
7 4 Day-of-week.
8 1 Day-of-week-in-month.
9 1 AM/PM selector.
10 10 Hour.
那是July 6, 2011 AD
,介于10:00:00 PM
和10:59:59 PM
之间。分钟和秒值是字段ID 12和13,您的代码不会打印出来,因此时间的不确定性。
答案 2 :(得分:1)
java.util.Calendar
提供的API设计不是很好,因为您的混淆说明了这一点。但请看一下JavaDoc for get()。 int值用于表示要获取其值的字段。查看该JavaDoc中列出的所有成员,称为“字段编号...”,例如YEAR
。因此calendar.get(Calendar.YEAR)
等于2011
。
答案 3 :(得分:0)
对于许多常见的Date相关场景,Calendar类是一种过度杀伤。历史有点如下:发现Date类在操作日期对象时存在许多不足之处。因此引入了Calendar类。但是,已经证明Calendar类是许多常见日期相关场景的过度设计解决方案。
阅读Javadoc以更好地理解Calendar类。