这是二月还是三月的日期?校准集(2010, 1, 10)
我已在我的应用程序中设置了此日历:
Calendar cal = Calendar.getInstance();
cal.set(2010, 1, 10);
我使用此 SimpleDateFormat
将月份作为单词获取:
SimpleDateFormat formatMonth = new SimpleDateFormat("MM");
在一个类中,它显示为 February
2010 年 10 号
。
在另一个版本中,它显示为 March
10th, 2010
。
哪个是正确的?
I have set this calendar in my app:
Calendar cal = Calendar.getInstance();
cal.set(2010, 1, 10);
I'm using this SimpleDateFormat
to get the month as a word:
SimpleDateFormat formatMonth = new SimpleDateFormat("MM");
In one class it comes out as February
10th, 2010
.
In another it comes out as March
10th, 2010
.
Which is correct?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Calendar.set() 从零开始,因此
1
表示二月
。第一个行为是正确的。我怀疑您的其他班级中的某些内容错误地尝试补偿从零开始的月份索引,这会导致 相差一错误。
The
month
argument to Calendar.set() is zero-based, so1
meansFebruary
. The first behavior is the correct one.I suspect something in your other class is mistakenly trying to compensate for zero-based month indexes, and that results in an off-by-one error.
日历类具有月份常量
例如, 。你应该使用那些。
The calendar class has constants for months
for example. You should be using those.
考虑到与 JDK 日期处理相关的所有麻烦,您确实应该使用 Joda 时间。上述代码将被重写为
2010 年 2 月 10 日 12:13:14.000(UTC)。没有歧义,线程安全且不可变。
您应该注意 SimpleDateFormat 不是线程安全的。
Given all the hassles associated with the JDK date handling, you should really be looking to use Joda time instead. The above code would be rewritten as
and represents 10 February 2010 at 12:13:14.000 in UTC. No ambiguity, thread safe and immutable.
You should note that SimpleDateFormat is not thread safe.