Есть ли хороший способ узнать дату следующей среды?
есть ли хороший способ получить дату предстоящей среды? То есть, если сегодня вторник, я хочу получить дату среды на этой неделе; если сегодня среда, я хочу получить дату следующей среды; если сегодня четверг, я хочу получить дату среды на следующей неделе.
спасибо.
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 ссылки
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));
предыдущий (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();