我想在给定的日期范围内获得一些时间。什么是最佳解决方案?例如,我要获取从今天到两个月的所有星期一,星期三和星期四的日期。
现代方法使用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
8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.Date
,Calendar
,和SimpleDateFormat
。
现在处于维护模式的Joda-
Time项目建议迁移到java.time类。
要了解更多信息,请参见Oracle教程。并在Stack
Overflow中搜索许多示例和说明。规格为JSR 310。
在哪里获取java.time类?
该 ThreeTen-额外
项目与其他类扩展java.time。该项目是将来可能向java.time添加内容的试验场。你可能在这里找到一些有用的类,比如Interval
,YearWeek
,YearQuarter
,和更多。
问题内容: 我有一个日期,以及如何使所有日期都落在给定日期所属的一周的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。 我是否有任何逻辑错误或其他问题?