Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java日历类不返回5月31日_Java - Fatal编程技术网

Java日历类不返回5月31日

Java日历类不返回5月31日,java,Java,我的程序Java日历类设置为5月31日 当我试图在5月份获得最大天数时,它返回了31天。没关系 int days = c.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println("Month:" + days); 但是当我尝试获取Calendar.MONTH和Calendar.DAY\u OF\u MONTH时 它总是返回June-1与所有其他日历字段不同,月份是以零为基础的;一月=0,二月=1,等等。这意味着五月是第四个月,而不

我的程序Java日历类设置为5月31日

当我试图在5月份获得最大天数时,它返回了31天。没关系

int days = c.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("Month:" + days);
但是当我尝试获取Calendar.MONTH和Calendar.DAY\u OF\u MONTH时


它总是返回June-1

与所有其他日历字段不同,月份是以零为基础的;一月=0,二月=1,等等。这意味着五月是第四个月,而不是第五个月

当您将月份设置为5,将日期设置为31时,您正在尝试将其设置为6月31日,它将转换为7月1日,6月只有30天。

getActualMaximum返回字段的最大值

GetActualMaximumCalendar.DAY\u OF\u MONTH返回31,即一个月内的最大天数 GetActualMaximumCalendar.DAY_OF_WEEK将返回7,这是一周中的最大天数 Calendar.MONTH和Calendar.DAY_OF_MONTH不会自动设置为日期,因此返回其默认值,即6月1日

试一试


这将设置为今天的日期。

您只需在创建日历实例后添加一行即可

例如:

Calendar cal = Calendar.getInstance();
cal.clear();
它会工作的。

tl;博士 使用现代的java.time类来取代麻烦的旧遗留日期时间类

YearMonth.from( 
    LocalDate.of( 2018 , Month.MAY , 31 ) 
).lengthOfMonth()
三十一

五,

2018年

java.time 您的问题没有提供足够的详细信息来诊断问题。但这个问题是没有意义的,现在有了更好的替代方法

麻烦的Calendar类现在是遗留类,由java.time类取代

表示月份的现代方法使用类

或者从一个日期获取一个YearMonth,一个LocalDate对象

审问被告

三十一

LocalDate可以为您提供其月份和年份的数字

int dayOfMonth = ld.getMonthValue() ;
int year = ld.getYear() ;
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

,及以后 内置的。 标准JavaAPI的一部分,带有捆绑实现。 Java9添加了一些次要功能和修复。 和 大部分java.time功能都在中向后移植到Java6和Java7。 更高版本的Android捆绑包实现了java.time类。 对于早期的Android,该项目采用了上面提到的Three-Ten Backport。看见
你能用更多的细节来更新你的问题吗?理想情况下,实际的代码对你不起作用?仅供参考,麻烦的旧日期时间类,如,和java.text.simpleDataFormat现在被java 8和更高版本中内置的类所取代。请参阅。由于代码片段打印了31,这很难解释观察到的行为。正如你所说,六月只有30天。亲爱的选民:请在投票时留下批评。
LocalDate.of( 2018 , Month.MAY , 31 ) 
         .getMonthValue()
LocalDate.of( 2018 , Month.MAY , 31 ) 
         .getYear()
YearMonth ym = YearMonth.of( 2018 , Month.MAY ) ;
LocalDate ld = LocalDate.of( 2018 , Month.MAY , 31 ) ;
YearMonth ym = YearMonth.from( ld ) ;
int lengthOfMonth = ym.lengthOfMonth() ;
int dayOfMonth = ld.getMonthValue() ;
int year = ld.getYear() ;