我有这个问题。 我想给定的日期范围之间的一些天。 什么是这个最佳的解决方案? 例如我想所有的周一,周三和周四日期从今天长达两个月。
先感谢您
我有这个问题。 我想给定的日期范围之间的一些天。 什么是这个最佳的解决方案? 例如我想所有的周一,周三和周四日期从今天长达两个月。
先感谢您
看一看java.util.Calendar
。 我们可以得到它的一个实例,将其设置为一个给定的日期,然后,例如,调用get(DAY_OF_WEEK)
就可以了。 此外,它有一些很好的方法来获取天数在一年中和天数在某一年。
现代的方法使用java.time类。
实例化List
对象,收集你的结果。
List<LocalDate> mondays = new ArrayList<>() ;
List<LocalDate> wednesdays = new ArrayList<>() ;
List<LocalDate> thursdays = new ArrayList<>() ;
确定今天的日期。 这需要一个时间段,随着日期世界各地通过区域对于任何给定的时刻发生变化。
LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) ) ;
添加两个多月。 该java.time类巧妙处理的短/长个月的问题。 阅读类文档,看看是否有自己的行为/政策达成协议。
LocalDate twoMonthsLater = today.plusMonths( 2 );
循环每个日期,每次递增一天。 使用测试其日常的周值DayOfWeek
枚举。 请注意,您可switch
的上Enum
对象,但奇怪的不能包含它的类名前缀。 因此,我们使用MONDAY
,而不是我的首选DayOfWeek.MONDAY
。
LocalDate localDate = today ;
while ( localDate.isBefore( twoMonthsLater ) ) {
DayOfWeek dow = localDate.getDayOfWeek() ;
switch ( dow ) {
case MONDAY:
mondays.add( localDate ) ;
break;
case WEDNESDAY:
wednesdays.add( localDate ) ;
break;
case THURSDAY:
thursdays.add( localDate ) ;
break;
default:
// Ignore any other day-of-week.
break;
}
// Set-up the next loop. Increment by one day at a time.
localDate = localDate.plusDays( 1 ) ;
}
转储到控制台。
System.out.println( "From " + today + " to " + twoMonthsLater + ":" );
System.out.println( "mondays: " + mondays ) ;
System.out.println( "wednesdays: " + wednesdays ) ;
System.out.println( "thursdays: " + thursdays ) ;
请参阅该代码在现场运行IdeOne.com 。
从2017年10月17日至2017年12月17日:
星期一:[2017年10月23日,2017年10月30日,2017年11月6日,2017年11月13日,二零一七年十一月二十日,2017年11月27日,2017年12月4日,2017年12月11日]
星期三:[2017年10月18日,2017年10月25日,2017年11月1日,2017年11月8日,2017年11月15日,2017年11月22日,2017年11月29日,2017年12月6日,2017年12月13日]
星期四:[2017年10月19日,2017年10月26日,2017年11月2日,2017年11月9日,2017年11月16日,2017年11月23日,2017年11月30日,2017年12月7日,二〇一七年十二月十四日]
该java.time框架是建立在Java 8和更高版本。 这些类取代麻烦的老传统日期时间类,如java.util.Date
, Calendar
,和SimpleDateFormat
。
该乔达-时间的项目,现在在维护模式 ,建议迁移到java.time类。
要了解更多信息,请参阅甲骨文教程 。 和搜索堆栈溢出了很多例子和解释。 规范是JSR 310 。
从哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time。 该项目是为将来可能增加的java.time试验场。 您可以在这里找到一些有用的类,比如Interval
, YearWeek
, YearQuarter
,和更多 。
计算x与y之间的周数,并采取X的平日考虑。