如何在java中检测日期是在本周还是下周?

如果我有一个事件的日期,例如2011-01-03,如何检测它是在这个或下周的java中? 任何示例代码?

编辑:

我认为这是一个简单的问题,结果比我想象的要复杂得多,本周我吃的是:从过去的太阳到本周六,下周是从下一个太阳到周六之后。

这在一定程度上取决于你对“本周”和“下周”的意思……但是对于Joda Time来说,很容易发现它是在“今天还是未来7天”,因为它是:

LocalDate event = getDateFromSomewhere(); LocalDate today = new LocalDate(); LocalDate weekToday = today.plusWeeks(1); LocalDate fortnightToday = weekToday.plusWeeks(1); if (today.compareTo(event) <= 0 && event.compareTo(weekToday) < 0) { // It's within the next 7 days } else if (weekToday.compareTo(event) <= 0 && event.compareTo(fornightToday) < 0) { // It's next week } 

编辑:要获得星期日到星期六的周,你可能想要:

 LocalDate startOfWeek = new LocalDate().withDayOfWeek(DateTimeConstants.SUNDAY); 

然后执行与上面相同的代码,但相对于startOfWeek

这个怎么样 :

 Calendar c=Calendar.getInstance(); c.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY); c.set(Calendar.HOUR_OF_DAY,0); c.set(Calendar.MINUTE,0); c.set(Calendar.SECOND,0); DateFormat df=new SimpleDateFormat("EEE yyyy/MM/dd HH:mm:ss"); System.out.println(df.format(c.getTime())); // This past Sunday [ May include today ] c.add(Calendar.DATE,7); System.out.println(df.format(c.getTime())); // Next Sunday c.add(Calendar.DATE,7); System.out.println(df.format(c.getTime())); // Sunday after next 

结果 :

 Sun 2010/12/26 00:00:00 Sun 2011/01/02 00:00:00 Sun 2011/01/09 00:00:00 

前两天之间的任何一天都是本周,最后两周之间的任何一天都是下周。

提示:使用日历。 为您的示例事件日期创建它的新实例。 然后,比较当前日期的WEEK_OF_YEAR和事件的日期。

对于那些必须坚持JDK 7并且不能使用joda.time的人,我编写了这个方法并进行了测试。

 public static boolean inSameWeek(Date date1, Date date2) { if (null == date1 || null == date2) { return false; } Calendar earlier = Calendar.getInstance(); Calendar later = Calendar.getInstance(); if (date1.before(date2)) { earlier.setTime(date1); later.setTime(date2); } else { earlier.setTime(date2); later.setTime(date1); } if (inSameYear(date1, date2)) { int week1 = earlier.get(Calendar.WEEK_OF_YEAR); int week2 = later.get(Calendar.WEEK_OF_YEAR); if (week1 == week2) { return true; } } else { int dayOfWeek = earlier.get(Calendar.DAY_OF_WEEK); earlier.add(Calendar.DATE, 7 - dayOfWeek); if (inSameYear(earlier.getTime(), later.getTime())) { int week1 = earlier.get(Calendar.WEEK_OF_YEAR); int week2 = later.get(Calendar.WEEK_OF_YEAR); if (week1 == week2) { return true; } } } return false; } public static boolean inSameYear(Date date1, Date date2) { if (null == date1 || null == date2) { return false; } Calendar cal1 = Calendar.getInstance(); cal1.setTime(date1); int year1 = cal1.get(Calendar.YEAR); Calendar cal2 = Calendar.getInstance(); cal2.setTime(date2); int year2 = cal2.get(Calendar.YEAR); if (year1 == year2) return true; return false; } 

您可以使用Calendar API检索给定日期的周。

 Calendar cal = Calendar.getInstance(); cal.setTime(somedate); int week = cal.get(Calendar.WEEK_OF_YEAR);