ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Как получить вчерашнюю дату в Java: SimpleDateFormat и Date

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вам необходимо определить дату предыдущего дня, вы можете воспользоваться классом Calendar в Java:

Java
Скопировать код
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
Date yesterday = cal.getTime();

Таким образом, вы легко и быстро переместитесь на один день назад от текущего.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Учет часового пояса

При работе с датами крайне важно учитывать часовой пояс:

Java
Скопировать код
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, который весьма упрощает работу с датами:

Java
Скопировать код
LocalDate yesterday = LocalDate.now().minusDays(1);

Такой подход обеспечивает эффективную и элегантную работу с датами.

Форматирование дат с SimpleDateFormat

Для того чтобы задать определённый формат отображения даты, воспользуйтесь SimpleDateFormat:

Java
Скопировать код
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" делает дату читаемой и аккуратно отформатированной.

Особые случаи – исключения из правил

Важно уметь обрабатывать такие особые случаи как начало месяца или високосный год:

Java
Скопировать код
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();

Этот фрагмент кода обеспечивает точное определение даты и в сложных случаях.

Визуализация

Если сегодня первый день нового месяца, то вчера было последнее число предыдущего месяца:

Java
Скопировать код
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
Date yesterday = cal.getTime();

Таким образом, мы можем визуализировать принцип работы с датами в Java.

Обновляемое и удобное для поддержки решение

Создание обобщённых методов позволяет сохранять актуальность вашего кода:

Java
Скопировать код
public static Date getYesterday() {
    Calendar cal = Calendar.getInstance(TimeZone.getDefault());
    cal.add(Calendar.DATE, -1);
    return cal.getTime();
}

С таким подходом ваши методы будут элегантны и готовы к дальнейшим расширениям.

Мощь миллисекунд

В работе с датами может пригодиться также и использование миллисекунд:

Java
Скопировать код
long millisInADay = 86_400_000L;
Date yesterday = new Date(System.currentTimeMillis() – millisInADay);

Этот подход с миллисекундами демонстрирует свои преимущества перед традиционными методами работы с датами.

Материалы для практического опыта

Вы можете проследить процесс работы с кодом на практике, протестировав его в среде IDEOne.

Полезные материалы

  1. java.time (Java Platform SE 8 ) — официальная документация Java Time API.
  2. Java's java.util.Date — подробное объяснение работы с java.util.Date.
  3. Java SimpleDateFormat – Javatpoint — руководство по работе с SimpleDateFormat.
  4. Java 8 Date – LocalDate, LocalDateTime, Instant | DigitalOcean — статья о нововведениях в Java 8 Date API.
  5. Calendar Class in Java with examples – GeeksforGeeks — примеры использования класса Calendar.