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

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

Спасибо.

10 голосов | спросил user256239 12 AM00000030000004431 2010, 03:54:44

5 ответов


0

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

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

ответил polygenelubricants 12 AM000000110000004231 2010, 11:41:42
0

Использование 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) - возвращает следующий день недели.   регулятор, который корректирует дату до первого появления   указанный день недели после корректировки даты, если это не   уже в тот день, и в этом случае возвращается тот же объект.

Изменить: Вы также можете передать ZoneId, чтобы получить текущую дату из системных часов в указанном часовом поясе.

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

Для получения дополнительной информации см. TemporalAdjusters

ответил Unknown 25 J000000Monday16 2016, 16:54:03
0

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

Calendar date = Calendar.getInstance();

Оттуда получите date.get(Calendar.DAY_OF_WEEK), чтобы получить текущий день недели и получить разницу в Calendar.WEDNESDAY и добавьте его.

ответил EboMike 12 AM00000040000001231 2010, 04:09:12
0

Использование 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));
ответил Yishai 12 AM00000040000004131 2010, 04:12:41
0
Calendar c= Calendar.getInstance();
c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
c.add(Calendar.DAY_OF_MONTH, 7);
c.getTime();
ответил Utsav Gupta 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 18 Sep 2014 12:23:50 +0400 2014, 12:23:50

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132