Java 生成具有给定月份和年份的日历

Java 生成具有给定月份和年份的日历,java,calendar,Java,Calendar,当月和年是输入参数时,如何生成日历 注意:我已经计算了一个月包含的天数。为什么不这样 Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month); 为什么不这样呢 Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, mont

当月和年是输入参数时,如何生成日历


注意:我已经计算了一个月包含的天数。

为什么不这样

Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
为什么不这样呢

Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
请注意,这样做将自动重新计算其余字段(例如一个月有多少天,等等)。您还可以在日历上使用add()函数来添加天数,它也会考虑所有这些

另见:

请注意,这样做将自动重新计算其余字段(例如一个月有多少天,等等)。您还可以在日历上使用add()函数来添加天数,它也会考虑所有这些

另见:

当然,对于日期时间操作,我应该建议使用
DateTime
而不是
Calendar

当然,对于日期时间操作,我应该建议使用
DateTime
而不是
Calendar

使用java.time 现代的方法是使用java.time类来取代麻烦的旧式
Calendar
&
Date

YearMonth
这个类表示一年零一个月,没有任何日期、时间或时区

YearMonth ym = YearMonth.of( 2017 , Month.MARCH );
LocalDate
您可以从中生成
LocalDate

LocalDate firstOfMonth = ym.atDay( 1 );
LocalDate endOfMonth = ym.atEndOfMonth();
如果希望日期介于两者之间,请循环。一次增加一天的日期。检查每天是否仍在相同的
YearMonth
。如果不是,您的增量太大,可以停止

List<LocalDate> dates = new ArrayList<>( 31 );
LocalDate localDate = ym.atDay( 1 );
while ( YearMonth.from( localDate ).equals( ym ) {
    dates.add( localDate );
    // Set up the next loop.
    localDate = localDate.plusDays( 1 );
}
列表日期=新的ArrayList(31);
LocalDate LocalDate=ym.atDay(1);
while(YearMonth.from(localDate).等于(ym){
dates.add(localDate);
//设置下一个循环。
localDate=localDate.plusDays(1);
}

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

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

要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

从哪里获得java.time类

  • 后来
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)
该项目使用其他类扩展了java.time。该项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,例如、、和。

使用java.time 现代的方法是使用java.time类来取代麻烦的旧式
Calendar
&
Date

YearMonth
这个类表示一年零一个月,没有任何日期、时间或时区

YearMonth ym = YearMonth.of( 2017 , Month.MARCH );
LocalDate
您可以从中生成
LocalDate

LocalDate firstOfMonth = ym.atDay( 1 );
LocalDate endOfMonth = ym.atEndOfMonth();
如果希望日期介于两者之间,请循环。将日期一次递增一天。检查每一天是否仍在相同的
YearMonth
。如果不是,则说明您的日期递增过多,可以停止

List<LocalDate> dates = new ArrayList<>( 31 );
LocalDate localDate = ym.atDay( 1 );
while ( YearMonth.from( localDate ).equals( ym ) {
    dates.add( localDate );
    // Set up the next loop.
    localDate = localDate.plusDays( 1 );
}
列表日期=新的ArrayList(31);
LocalDate LocalDate=ym.atDay(1);
while(YearMonth.from(localDate).等于(ym){
dates.add(localDate);
//设置下一个循环。
localDate=localDate.plusDays(1);
}

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

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

要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

从哪里获得java.time类

  • 后来
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)

该项目使用其他类扩展了java.time。该项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,例如、、。

“注意:我已经计算了一个月包含的天数。”a)您可能做错了。很难做对-有很多规则。b)框架中已经有代码为您执行此操作。为什么要自己写?@Mark Byers:有完整代码的链接吗?“注意:我已经计算了一个月包含的天数。”a)你可能做错了。很难做到正确——有很多规则。b) 框架中已经有代码为您执行此操作。为什么要自己写?@Mark Byers:有完整代码的链接吗?我们在日历实例中设置了什么以及如何继续?你说你有月份和年份。你是这么说的。(参见javadoc)好的,我们正在设置月份和年份,但下一步是什么?我以前没有使用过日历实例。那么有详细的描述吗?我不知道-你想用它做什么:)我们在日历实例中设置了什么以及如何继续?你说你有月份和年份。你是这么说的。(参见javadoc)好的,我们正在设置月份和年份,但下一步是什么?我以前没有使用过日历实例。有详细的描述吗?我不知道-你想用它做什么:)