[英]What would be a good implementation to get all Monday and Thursday dates Between a given date range (DateX and DateY) in JAVA
我想在给定的日期范围内间隔几天。 什么是最佳解决方案? 例如,我想获取从今天到两个月内所有星期一、星期三和星期四的日期。
现代方法使用 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 ) ;
从 2017-10-17 到 2017-12-17:
星期一: [2017-10-23, 2017-10-30, 2017-11-06, 2017-11-13, 2017-11-20, 2017-11-27, 2017-12-04, 2017-12-11 ]
星期三: [2017-10-18, 2017-10-25, 2017-11-01, 2017-11-08, 2017-11-15, 2017-11-22, 2017-11-29, 2017-12-06 , 2017-12-13]
星期四: [2017-10-19, 2017-10-26, 2017-11-02, 2017-11-09, 2017-11-16, 2017-11-23, 2017-11-30, 2017-12-07 , 2017-12-14]
java.time框架内置于 Java 8 及更高版本中。 这些类取代了麻烦的旧的遗留日期时间类,例如java.util.Date
、 Calendar
和SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle 教程。 并在 Stack Overflow 中搜索许多示例和解释。 规范是JSR 310 。
在哪里获取 java.time 类?
ThreeTen-Extra项目用附加类扩展了 java.time。 这个项目是未来可能添加到 java.time 的试验场。 您可能会在这里找到一些有用的类,例如Interval
、 YearWeek
、 YearQuarter
等等。
计算 x 和 y 之间的周数,并考虑 x 的工作日。
看看java.util.Calendar
。 可以获取它的一个实例,将其设置为给定日期,然后,例如,对其调用get(DAY_OF_WEEK)
。 它还有一些很好的方法来获取给定年份的天数和给定年份的天数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.