我已在我的应用中设置了这个日历:
Calendar cal = Calendar.getInstance();
cal.set(2010, 1, 10);
我正在使用此SimpleDateFormat
来表示月份:
SimpleDateFormat formatMonth = new SimpleDateFormat("MM");
在一个课程中,它出现为 February
10th, 2010
。
另一方面,它出现在 March
10th, 2010
。
哪个是正确的?
答案 0 :(得分:7)
Calendar.set()的month
参数从零开始,因此1
表示February
。第一个行为是正确的。
我怀疑你的其他课程中的某些内容错误地尝试补偿基于零的月份索引,这会导致off-by-one错误。
答案 1 :(得分:3)
日历类有几个月的常量
Calendar.JANUARY
例如,。你应该使用那些。
答案 2 :(得分:1)
考虑到与JDK日期处理相关的所有麻烦,您应该真正关注use Joda time instead。上面的代码将被重写为
DateTime dt = new DateTime().withDate(2010,2,10).withTime(12,13,14,0);
并代表2010年2月10日12:13:14.000(UTC)。没有歧义,线程安全且不可变。
您应该注意SimpleDateFormat不是线程安全的。