[英]Setting values in calendar (java.util.Calendar)
我正在学习Java中的Calendar类,但无法理解Set(Calendar.Day OF MONTH)
方法。
它去了:
import java.util.Calendar;
import java.util.Date
public class TestCalender
{
public static void main(String[] args)
{
Calendar cal = Calendar.getInstance();
Date date= cal.getTime();
System.out.println(date);
cal.set(Calendar.DAY_OF_MONTH,33);
//cal.set(Calendar.MONTH,13);------>(1)
Date newdate = cal.getTime();
System.out.println(newdate);
输出:
Fri May 12 17:30:50 CDT 2017
Fri Jun 02 17:30:50 CDT 2017
当我取消对statement(1)的注释时,输出更改为:
Fri May 12 17:33:22 CDT 2017
Mon Mar 05 17:33:22 CST 2018
这是我的问题:
我知道将月份更改为三月,但是我无法弄清为什么日期更改为5。据我的理解,日期不应该更改为2018年4月2日(自3月起计算33天) 3月只有31天,计数转移到4月。
如果有人可以帮助消除这一疑问,我将万分感谢。
提前致谢。
问候鲁帕
Calendar
类使用从0开始的月份,到12月结束于11。 因此,当您将月份设置为13时,您指定了下一年的2月,而“ 2月33日”(有28天)是3月5日。
java.util.date类很古怪且难以使用。 使用java.time代替。
我正在学习日历课程
别。
Calendar
类非常麻烦,设计不当,令人困惑和有缺陷。 现在是遗产。 由java.time类取代。 我们可以将该类扫入Java历史的垃圾箱中。
在众多问题中, Calendar
使用1月至12月的0-11疯狂月份。 Kyriacou在正确答案中正确描述了这一事实。 相反,java.time类对Jan-Dec使用理智的编号1-12; 请参阅Month
枚举。
不太清楚代码段中的目标是什么,但是您似乎要为日期增加33天。
LocalDate
类表示没有日期和时区的仅日期值。
java.time和旧类之间的一大区别是,现代类使用不可变对象 。 因此,将日期添加到日期会导致一个新的日期对象,其值基于原始对象,而原始对象保持不变。 这避免了很多混乱,并使它们成为线程安全的 。
LocalDate ld = LocalDate.of( 2017 , Month.MARCH , 23 ) ;
LocalDate later = ld.plusDays( 33 );
java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧的旧式日期时间类,例如java.util.Date
, Calendar
和SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参见Oracle教程 。 并在Stack Overflow中搜索许多示例和说明。 规格为JSR 310 。
在哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展了java.time。 该项目为将来可能在java.time中添加内容提供了一个试验场。 您可以在这里找到一些有用的类,比如Interval
, YearWeek
, YearQuarter
,和更多 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.