Простой, краткий способ выразить «завтра в 10:30», используя стандартные библиотеки Java - PullRequest
2 голосов
/ 11 сентября 2010

Используя только стандартные вызовы Java 1.5, я ищу краткий и простой способ получить объект Date Java для определенного времени, скажем, следующего 10:30 утра, который произойдет в будущем. Обычно это будет завтра в 10:30, но это может быть сегодня в 10:30, если текущее время, скажем, 8 утра.

Эффективность - это только вторичная или третичная проблема.

Кажется, что должен быть более изящный способ сделать это, чем создание объекта Calendar вручную и установка каждого из его полей в отдельном вызове метода.

Использование SimpleDateFormat было бы хорошо с форматной строкой, такой как «ЧЧ: мм», но я не вижу умного способа настроить его на следующее будущее 10:30, а не просто сегодняшнее 10:30. Плюс, эти блоки try / catch немного липкие.

Неужели нет простого одно- или двухстрочного способа выразить это?

Ответы [ 2 ]

5 голосов
/ 11 сентября 2010

В стандартном API нет метода соответствия, вам нужна последовательность, подобная

Calendar cal = Calendar.getInstance();
Date today = cal.getTime();
cal.set(Calendar.HOUR, 10);
cal.set(Calendar.MINUTE,30);
cal.set(Calendar.SECOND,0);
cal.set(Calendar.AM_PM, Calendar.AM);

Date next = cal.getTime();
if (today.after(next)) {
    cal.add(Calendar.DAY_OF_MONTH, 1);
}
System.out.println(cal.getTime());

Вы должны просто поместить это в служебный класс.

1 голос
/ 11 сентября 2010

Вы также можете посмотреть на Joda , которая обеспечивает лучшую реализацию даты / времени, чем JDK, вы можете получить следующий экземпляр 10:30, используя этот код

final LocalDateTime now = new LocalDateTime().withSecondOfMinute(0).withMillisOfDay(0);
final LocalDateTime tenThirty;
if (now.getHourOfDay() <= 10 && now.getMinuteOfHour() <= 30) {
    tenThirty = now.withHourOfDay(10).withMinuteOfHour(30);
} else {
    tenThirty = now.plusDays(1).withHourOfDay(10).withMinuteOfHour(30);
}
...