当前位置: 首页 > 面试题库 >

在JAVA中获取给定日期范围(DateX和DateY)之间的所有星期一和星期四日期的最佳实现是什么?

栾瑞
2023-03-14
问题内容

我想在给定的日期范围内获得一些时间。什么是最佳解决方案?例如,我要获取从今天到两个月的所有星期一,星期三和星期四的日期。


问题答案:

现代方法使用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枚举html" target="_blank">测试其星期几的值。请注意,您可以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-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.time框架是建立在Java
8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.DateCalendar,和SimpleDateFormat

现在处于维护模式的Joda-
Time项目建议迁移到java.time类。

要了解更多信息,请参见Oracle教程。并在Stack
Overflow中搜索许多示例和说明。规格为JSR 310。

在哪里获取java.time类?

  • Java SE 8Java SE 9 和更高版本
    • 内置的
    • 标准Java API的一部分,具有捆绑的实现。
    • Java 9添加了一些次要功能和修复。
  • Java SE 6Java SE 7
    • java.time的许多功能在 ThreeTen- Backport中都被反向移植到Java 6和7 。
  • 安卓系统
    • 所述 ThreeTenABP 项目适应 ThreeTen-反向移植 (上述)为Android特异性。
    • 请参阅 如何使用ThreeTenABP…

ThreeTen-额外
项目与其他类扩展java.time。该项目是将来可能向java.time添加内容的试验场。你可能在这里找到一些有用的类,比如IntervalYearWeekYearQuarter,和更多。



 类似资料:
  • 问题内容: 我有一个日期,以及如何使所有日期都落在给定日期所属的一周的Java中? 有人可以帮我这个吗。 我正在尝试获取给定日期的星期日期,我已经解释了为什么这个问题不是重复的,请在评论前阅读。 问题答案: 您可以尝试以下方式, 输出值

  • 问题内容: 我最近遇到了一项任务,必须在日期范围内获得所有星期五。我写了一小段代码,很惊讶地看到一些奇怪的行为。 下面是我的代码: 现在,当我运行代码时,我注意到缺少2011年的星期五。经过一些调试和在线浏览后,我发现这是特定于区域设置的,我必须使用它来修复它。 因此,在上面的代码中未注释相关行。 据我了解,一年的第一周应该从一年的整个星期开始。 例如,2010年1月1日是星期五。但它不会显示在结

  • 问题内容: 我需要输出从当前日期开始的未来12个月的日期列表(仅星期一和星期二),如下所示: 2010年1月 星期二2010年1月12日 星期一2010 年1月18日 星期二2010 年1月19日 星期一2010 年1月25 日星期一2010年 2月2日 星期二2010 年2月8日 星期一2010年2月9日星期二2010 年 2月 15 日星期一2010年2月15日 星期二2010 年2月16日

  • 问题内容: 因此,对于一个开始日期和结束日期,我想确定在这两个日期之间发生的一周中的特定天数。 那么多少个星期一,星期二等 我知道我可以在“开始日期”和“结束日期”之间循环并每天检查一次,但是可能相差很多天。我更喜欢不需要循环的东西。有任何想法吗?(必须在SQL Server2005+中受支持) 问题答案: 鉴于我 认为 您正在尝试获得的结果,应该这样做:

  • 问题内容: 如果可能的话,在以下情况下,我希望使用joda或非joda解决方案 假设我的一周从2012年5月2日开始,给定的当前日期为02/22/2011。我需要计算给定当前日期的星期开始和结束日期。因此,我的解决方案的星期应该从02/19开始,而星期在02/25结束。为简单起见,我将我的工作日设置为02/05/2011,但是可能是任何一天,我的工作日始终为7天。 我现有的代码如下,但似乎无法按预

  • 我想使用Java8包Java从给定的星期和年份中获取星期一日期。时间但在某种程度上,我面临着这个问题,因为它并没有返回正确的日期。 例如: 如果我通过周=1和年=2013那么日期是:2012-12-31。 但是如果我通过了周=53和年=2015,那么日期是: 2014-12-29。我期待2014-12-28。 我是否有任何逻辑错误或其他问题?