Как получить вчерашнюю дату в Java: SimpleDateFormat и Date
Быстрый ответ
Если вам необходимо определить дату предыдущего дня, вы можете воспользоваться классом Calendar
в Java:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
Date yesterday = cal.getTime();
Таким образом, вы легко и быстро переместитесь на один день назад от текущего.
Учет часового пояса
При работе с датами крайне важно учитывать часовой пояс:
TimeZone tz = TimeZone.getDefault();
Calendar cal = Calendar.getInstance(tz);
cal.add(Calendar.DATE, -1);
Date yesterday = cal.getTime();
Применение метода calendar.getInstance(tz)
учтёт ваш текущий часовой пояс и обеспечит точное определение "вчера".
Современный подход с java.time
С выходом Java 8 нам стал доступен пакет java.time
, который весьма упрощает работу с датами:
LocalDate yesterday = LocalDate.now().minusDays(1);
Такой подход обеспечивает эффективную и элегантную работу с датами.
Форматирование дат с SimpleDateFormat
Для того чтобы задать определённый формат отображения даты, воспользуйтесь SimpleDateFormat
:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
String formattedDate = sdf.format(cal.getTime());
Применение шаблона "yyyy-MM-dd" делает дату читаемой и аккуратно отформатированной.
Особые случаи – исключения из правил
Важно уметь обрабатывать такие особые случаи как начало месяца или високосный год:
Calendar cal = Calendar.getInstance();
if (cal.get(Calendar.DAY_OF_MONTH) == 1) {
cal.add(Calendar.MONTH, -1);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
} else {
cal.add(Calendar.DATE, -1);
}
Date yesterday = cal.getTime();
Этот фрагмент кода обеспечивает точное определение даты и в сложных случаях.
Визуализация
Если сегодня первый день нового месяца, то вчера было последнее число предыдущего месяца:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
Date yesterday = cal.getTime();
Таким образом, мы можем визуализировать принцип работы с датами в Java.
Обновляемое и удобное для поддержки решение
Создание обобщённых методов позволяет сохранять актуальность вашего кода:
public static Date getYesterday() {
Calendar cal = Calendar.getInstance(TimeZone.getDefault());
cal.add(Calendar.DATE, -1);
return cal.getTime();
}
С таким подходом ваши методы будут элегантны и готовы к дальнейшим расширениям.
Мощь миллисекунд
В работе с датами может пригодиться также и использование миллисекунд:
long millisInADay = 86_400_000L;
Date yesterday = new Date(System.currentTimeMillis() – millisInADay);
Этот подход с миллисекундами демонстрирует свои преимущества перед традиционными методами работы с датами.
Материалы для практического опыта
Вы можете проследить процесс работы с кодом на практике, протестировав его в среде IDEOne.
Полезные материалы
- java.time (Java Platform SE 8 ) — официальная документация Java Time API.
- Java's java.util.Date — подробное объяснение работы с
java.util.Date
. - Java SimpleDateFormat – Javatpoint — руководство по работе с
SimpleDateFormat
. - Java 8 Date – LocalDate, LocalDateTime, Instant | DigitalOcean — статья о нововведениях в Java 8 Date API.
- Calendar Class in Java with examples – GeeksforGeeks — примеры использования класса
Calendar
.