有没有一个好方法来获得即将到来的星期三的日期?

有没有一个好方法来获得即将到来的星期三的日期? 也就是说,如果今天是星期二,我想在本周获得星期三的日期; 如果今天是星期三,我想得到下周三的日期; 如果今天是星期四,我想在接下来的一周得到星期三的日期。

谢谢。

基本算法如下:

  • 获取当前日期
  • 得到它的一周
  • 找出它与周三的区别
  • 如果差异不是正数,则添加7(即坚持下一个即将来临/未来的日期)
  • 添加差异

这是一个片段,展示如何使用java.util.Calendar执行此操作:

 import java.util.Calendar; public class NextWednesday { public static Calendar nextDayOfWeek(int dow) { Calendar date = Calendar.getInstance(); int diff = dow - date.get(Calendar.DAY_OF_WEEK); if (diff <= 0) { diff += 7; } date.add(Calendar.DAY_OF_MONTH, diff); return date; } public static void main(String[] args) { System.out.printf( "%ta, % 

相对于我此处和现在,上述片段的输出是"Wed, Aug 18, 2010"

API链接

  • java.util.Calendar
  • java.util.Formatter - 用于格式化字符串语法

使用Java8日期时API,您可以轻松找到即将到来的星期三。

 LocalDate nextWed = LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY)); 

next(DayOfWeek dayOfWeek) – 返回下一个星期调整器,它将日期调整为调整日期后指定星期几的第一次出现。

假设如果你想在上周三之后获得,

 LocalDate prevWed = LocalDate.now().with(TemporalAdjusters.previous(DayOfWeek.WEDNESDAY)); 

previous(DayOfWeek dayOfWeek) – 返回上一个星期几调整器,它将日期调整为调整日期之前指定星期几的第一次出现。

假设如果你想获得下一个或当前的星期三那么

 LocalDate nextOrSameWed = LocalDate.now().with(TemporalAdjusters.nextOrSame(DayOfWeek.WEDNESDAY)); 

nextOrSame(DayOfWeek dayOfWeek) – 返回下一个或相同的星期几调整器,它将日期调整为调整日期后指定星期几的第一次出现,除非它已在当天case返回相同的对象。

编辑:您还可以通过ZoneId从指定时区的系统时钟获取当前日期。

 ZoneId zoneId = ZoneId.of("UTC"); LocalDate nextWed = LocalDate.now(zoneId).with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY)); 

有关更多信息,请参阅TemporalAdjusters

使用java.util.Calendar。 你得到这样的当前日期/时间:

 Calendar date = Calendar.getInstance(); 

从那里,获取date.get(Calendar.DAY_OF_WEEK)以获取当周的当天,并获得与Calendar.WEDNESDAY的差异并添加它。

使用JodaTime:

  LocalDate date = new LocalDate(System.currentTimeMillis()); Period period = Period.fieldDifference(date, date.withDayOfWeek(DateTimeConstants.WEDNESDAY)); int days = period.getDays(); if (days < 1) { days = days + 7; } System.out.println(date.plusDays(days)); 
 Calendar c= Calendar.getInstance(); c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); c.add(Calendar.DAY_OF_MONTH, 7); c.getTime();