Есть ли хороший способ узнать дату следующей среды?

есть ли хороший способ получить дату предстоящей среды? То есть, если сегодня вторник, я хочу получить дату среды на этой неделе; если сегодня среда, я хочу получить дату следующей среды; если сегодня четверг, я хочу получить дату среды на следующей неделе.

спасибо.

5 ответов


основной алгоритм следующий:

  • получить текущую дату
  • получите свой день недели
  • найдите свою разницу со средой
  • если разница не положительна, добавьте 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 ссылки


используя Java8 дата время API вы можете легко найти ближайшую среду.

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

next (DayOfWeek dayOfWeek) - возвращает регулятор следующего дня недели, который регулирует дату к первому наступлению указанного дня недели после даты настраиваясь.

предположим, если вы хотите получить предыдущую среду, то,

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

предыдущий (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


используйте java.утиль.Календарь. Вы получаете текущую дату / время следующим образом:

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();