繁体   English   中英

在日历中设置值(java.util.Calendar)

[英]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.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧的旧式日期时间类,例如java.util.DateCalendarSimpleDateFormat

现在处于维护模式Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参见Oracle教程 并在Stack Overflow中搜索许多示例和说明。 规格为JSR 310

在哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。 该项目为将来可能在java.time中添加内容提供了一个试验场。 您可以在这里找到一些有用的类,比如IntervalYearWeekYearQuarter ,和更多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM