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

Setting values in calendar (java.util.Calendar)

我正在学习 Java 中的日历 class,但我无法理解 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

当我取消注释语句 (1) 时,输出更改为:

Fri May 12 17:33:22 CDT 2017  
Mon Mar 05 17:33:22 CST 2018

这是我的问题:

我了解月份更改为三月,但我无法弄清楚为什么日期更改为 5。根据我的理解,日期不应更改为 2018 年 4 月 2 日(33 天正在计算 3 月,因为 3 月只有 31 天,计数移至 4 月)。

如果有人能帮助解决这个问题,我将不胜感激。

提前致谢。

问候 鲁帕

Calendar class 使用从 0 开始到 11 结束的月份表示十二月。因此,当您将月份设置为 13 时,您指定的是次年的 2 月,“2 月 33 日”(有 28 天)就是 3 月 5 日。

java.util.date classes 古怪且难以使用。请改用 java.time。

I'm learning the Calendar class

不要。

Calendar class 是出了名的麻烦、设计糟糕、令人困惑和有缺陷。现在遗产。由 java.time classes 补充。我们可以将 class 扫入 Java 历史的垃圾箱。

在它的许多问题中,Calendar 使用疯狂的月份编号 0-11 来表示一月到十二月。在正确的 . The java.time classes, in contrast, use sane numbering 1-12 for Jan-Dec; see the Month 枚举中正确描述了这一事实。

不太确定您在该代码段中的目标是什么,但您似乎将日期增加了 33 天。

LocalDate class 表示没有时间和时区的仅日期值。

java.time 和传统 classes 之间的一大区别是现代 classes 使用 immutable objects. So adding days to a date results in a new date object with its values based on the original object, while the original object remains untouched. This avoids much confusion, and makes them thread-safe.

LocalDate ld = LocalDate.of( 2017 , Month.MARCH , 23 ) ;
LocalDate later = ld.plusDays( 33 );

关于java.time

java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.

Joda-Time project, now in maintenance mode, advises migration to the java.time classes.

要了解更多信息,请参阅 Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310

从哪里获得java.time classes?

ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as Interval, YearWeek, YearQuarter, and more.