Java日历类不返回5月31日
我的程序Java日历类设置为5月31日 当我试图在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,等等。这意味着五月是第四个月,而不
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() ;