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

use*_*239 10 java calendar date

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

谢谢.

pol*_*nts 27

基本算法如下:

  • 获取当前日期
  • 得到它的一周
  • 找出它与周三的区别
  • 如果差异不是正数,则添加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, %<tb %<te, %<tY",
            nextDayOfWeek(Calendar.WEDNESDAY)
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

相对于我这里和现在,上面代码片段的输出是"Wed, Aug 18, 2010".

API链接


Unk*_*own 10

使用Java8 Date time API,您可以轻松找到即将到来的星期三.

LocalDate                        // Represent a date-only value, without time-of-day and without time zone.
.now()                           // Capture the current date as seen in the wall-clock time used by the people of a specific region (a time zone). The JVM’s current default time zone is used here. Better to specify explicitly your desired/expected time zone by passing a `ZoneId` argument. Returns a `LocalDate` object.
.with(                           // Generate a new `LocalDate` object based on values of the original but with some adjustment. 
    TemporalAdjusters            // A class that provides some handy pre-defined implementations of `TemporalAdjuster` (note the singular) interface.
    .next(                       // An implementation of `TemporalAdjuster` that jumps to another date on the specified day-of-week.
        DayOfWeek.WEDNESDAY      // Pass one of the seven predefined enum objects, Monday-Sunday.
    )                            // Returns an object implementing `TemporalAdjuster` interface.
)                                // Returns a `LocalDate` object.
Run Code Online (Sandbox Code Playgroud)

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

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

LocalDate nextWed = LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY));
Run Code Online (Sandbox Code Playgroud)

previous(DayOfWeek dayOfWeek) - 返回上一周的调整程序,该调整程序将日期调整为调整日期之前指定的星期几的第一次出现.

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

LocalDate prevWed = LocalDate.now().with(TemporalAdjusters.previous(DayOfWeek.WEDNESDAY));
Run Code Online (Sandbox Code Playgroud)

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

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

LocalDate nextOrSameWed = LocalDate.now().with(TemporalAdjusters.nextOrSame(DayOfWeek.WEDNESDAY));
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅TemporalAdjusters

  • 正确的。如果您想包含今天,请调用“nextOrSame”。 (2认同)