我想使用java中的当前日期来识别整个星期(从星期日到星期六) .
例如:今天是星期二 - 这意味着我需要星期二,星期一和星期日的日期 .
如果当天是星期三 - 那么我需要从星期日到星期三的日期 .
如何在java中实现这个逻辑?
我能够从当前日期开始一周的开始,但我不知道如何从周开始日期获得剩余的日期 . 有没有可用的java实用程序?
作为参考,用于制定产出的当前日期是2015年7月22日星期三(2015年7月22日)
LocalDate ld = LocalDate.now(); LocalDate sunday = ld.minusDays(ld.getDayOfWeek().getValue()); LocalDate tommorrow = ld.plusDays(1); LocalDate date = sunday; while (date.isBefore(tommorrow)) { System.out.println(date); date = date.plusDays(1); }
打印
2015-07-19 2015-07-20 2015-07-21 2015-07-22
As an alternative
(这基本上适用于所有其他提到的API)你可以从今天开始向后走......
LocalDate date = LocalDate.now(); do { System.out.println(date); date = date.minusDays(1); } while (date.getDayOfWeek() != DayOfWeek.SATURDAY);
2015-07-22 2015-07-21 2015-07-20 2015-07-19
LocalDate now = LocalDate.now(); LocalDate sunday = now.minusDays(5).withDayOfWeek(DateTimeConstants.SUNDAY); LocalDate tommorrow = now.plusDays(1); LocalDate date = sunday; while (date.isBefore(tommorrow)) { System.out.println(date); date = date.plusDays(1); }
作为最后的手段 . 但请记住, Calendar 带有时间信息,因此使用 before , after 和 equals 可能并不总是按照您认为应该做的...
Calendar
before
after
equals
Calendar cal = Calendar.getInstance(); cal.setFirstDayOfWeek(Calendar.SUNDAY); cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); Calendar today = Calendar.getInstance(); while (cal.before(today)) { System.out.println(cal.getTime()); cal.add(Calendar.DATE, 1); }
Sun Jul 19 15:01:49 EST 2015 Mon Jul 20 15:01:49 EST 2015 Tue Jul 21 15:01:49 EST 2015 Wed Jul 22 15:01:49 EST 2015
这应该可以解决您的问题,您可以根据自己的情况进一步修改 .
Calendar c = Calendar.getInstance(); c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); System.out.println("Date " + c.getTime()); c.add(Calendar.DATE, +1); System.out.println(c.getTime());
希望能帮助到你
使用Java 8非常容易 . 但请注意,iso-8601标准代表 Monday 作为一周的第一天... See the JavaDocs ...所以为了实现您的要求,您只需找到 Monday 作为基本情况......
Monday
DayOfWeek是一个代表一周7天的枚举 - 周一,周二,周三,周四,周五,周六和周日 . 除了文本枚举名称之外,每个星期几还有一个int值 . int值遵循ISO-8601标准,从1(星期一)到7(星期日) . 建议应用程序使用enum而不是int值来确保代码清晰度 .
/** * @author Edward Beckett :: <Edward@EdwardBeckett.com> * @since :: 7/22/2015 */ public class WeekOfToday{ public static void main( String[] args ) { Integer dayOfWeek = LocalDate.now().getDayOfWeek().compareTo( DayOfWeek.MONDAY ) ; LocalDate startOfWeek = LocalDate.now().minusDays( dayOfWeek ); LocalDate endOfWeek = LocalDate.now().plusDays( DayOfWeek.SUNDAY.getValue() - dayOfWeek - 1 ); } }
输出
Start of Week : 2015-07-20 End of Week : 2015-07-26
3 回答
作为参考,用于制定产出的当前日期是2015年7月22日星期三(2015年7月22日)
Java 8
打印
As an alternative
(这基本上适用于所有其他提到的API)你可以从今天开始向后走......
打印
JodaTime
打印
日历
作为最后的手段 . 但请记住,
Calendar
带有时间信息,因此使用before
,after
和equals
可能并不总是按照您认为应该做的...打印
这应该可以解决您的问题,您可以根据自己的情况进一步修改 .
希望能帮助到你
使用Java 8非常容易 . 但请注意,iso-8601标准代表
Monday
作为一周的第一天... See the JavaDocs ...所以为了实现您的要求,您只需找到Monday
作为基本情况......