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

时间:2010-08-11 23:54:45

标签: java date calendar

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

感谢。

6 个答案:

答案 0 :(得分: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)
        );
    }
}

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

API链接

答案 1 :(得分:6)

使用Java8 Date time 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) - 返回下一天或同一天   调整器,它将日期调整为第一次出现   调整日期后指定的星期几,除非是   已经在那一天,在这种情况下返回相同的对象。

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

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

有关更多信息,请参阅TemporalAdjusters

答案 2 :(得分:4)

使用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));

答案 3 :(得分:3)

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

Calendar date = Calendar.getInstance();

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

答案 4 :(得分:3)

Calendar c= Calendar.getInstance();
c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
c.add(Calendar.DAY_OF_MONTH, 7);
c.getTime();

答案 5 :(得分:0)

public static void nextWednesday() throws ParseException 
    {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        int weekday = calendar.get(Calendar.DAY_OF_WEEK);
        int days = Calendar.WEDNESDAY - weekday;
        if (days < 0)
        {
            days += 7;
        }
        calendar.add(Calendar.DAY_OF_YEAR, days);

        System.out.println(sdf.format(calendar.getTime()));
    }