Мастерство Java Date & Time: SimpleDateFormat, получение текущей даты и сравнение дат
Это руководство охватывает основы работы с датами и временем в Java, включая:
- Отображение текущей даты и времени
- Форматирование и парсинг дат с
SimpleDateFormat - Сравнение двух дат
Java-объект Date представляет следующие компоненты:

- Год (2 или 4 цифры)
- Месяц (числовой, трехбуквенное сокращение или полное название)
- День месяца
- День недели (например, Sun, Mon, Tue)
Компьютеры поддерживают множество дополнительных параметров, связанных с датой, которые мы обсудим в следующих разделах.
Отображение текущей даты в Java
Класс java.util.Date в Java предоставляет простой способ получения текущей системной даты и времени. Ниже приведен минимальный пример:
import java.util.Date;
class DateExample {
public static void main(String[] args) {
Date current = new Date();
System.out.println(current.toString());
}
}
Вывод:
Wed Nov 29 06:36:22 UTC 2017
Вывод использует формат toString() по умолчанию. Чтобы представить дату в пользовательском макете, нужно отформатировать её явно.
SimpleDateFormat: Парсинг и форматирование дат
Java форматирует даты, используя строки-шаблоны, которые отображают буквы на конкретные компоненты даты. Ниже приведена справочная таблица:
| Буква | Компонент даты или времени | Пример |
|---|---|---|
| G | Обозначение эры | AD |
| y | Год | 2018 |
| M | Месяц в году | July, Jul, 07 |
| w | Неделя в году | 27 |
| W | Неделя в месяце | 2 |
| D | День в году | 189 |
| d | День в месяце | 10 |
| F | День недели в месяце | 2 |
| E | Название дня в неделе | Tuesday, Tue |
| u | Номер дня недели (1=Пн … 7=Вс) | 1 |
| a | Маркер AM/PM | PM |
| H | Час в дне (0-23) | 0 |
| k | Час в дне (1-24) | 24 |
| K | Час в am/pm (0-11) | 0 |
| h | Час в am/pm (1-12) | 12 |
| m | Минута в часе | 30 |
| s | Секунда в минуте | 55 |
| S | Миллисекунда | 978 |
| z | Часовой пояс | Pacific Standard Time; PST; GMT-08:00 |
| Z | Смещение часового пояса | -0800 |
| X | Часовой пояс | -08, -0800, -08:00 |
Обращайтесь к этой таблице всякий раз, когда вам нужно построить конкретную строку формата.
Использование SimpleDateFormat
Класс SimpleDateFormat позволяет определить шаблон для форматирования или парсинга дат. Например:
- Желаемый формат: 2012.10.23 20:20:45 PST → шаблон
yyyy.MM.dd HH:mm:ss zzz - Желаемый формат: 09:30:00 AM 23-May-2012 → шаблон
hh:mm:ss a dd-MMM-yyyy
Совет: Внимательно следите за регистром — использование M для месяцев и m для минут критически важно.
import java.text.SimpleDateFormat;
import java.util.Date;
class TestDatesFormat {
public static void main(String[] args) {
Date now = new Date();
System.out.println(now);
String pattern = "hh:mm:ss a dd-MMM-yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
System.out.println(sdf.format(now));
}
}
Вывод:
Wed Nov 29 06:31:41 UTC 2017 06:31:41 AM 29-Nov-2017
Сравнение дат

Наиболее надежный метод сравнения дат в Java — compareTo(), который возвращает отрицательное значение, если первая дата раньше, ноль, если равны, и положительное значение, если позже.
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;
class TestDatesCompare {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Date date1 = sdf.parse("20-08-1981");
Date date2 = sdf.parse("12-10-2012");
System.out.println("Date1 : " + sdf.format(date1));
System.out.println("Date2 : " + sdf.format(date2));
if (date1.compareTo(date2) > 0) {
System.out.println("Date 1 occurs after Date 2");
} else if (date1.compareTo(date2) < 0) {
System.out.println("Date 1 occurs before Date 2");
} else {
System.out.println("Both dates are the same");
}
}
}
Вывод:
Date1 : 20-08-1981 Date2 : 12-10-2012 Date 1 occurs before Date 2
java
- Расчет напряжения и тока в реактивных DC цепях
- Получение текущей даты и времени в Python: практическое руководство
- Python: получение текущего времени и работы с часовыми поясами
- Освоение операторов Java: типы, синтаксис и практические примеры
- Комментарии в Java: типы, использование и лучшие практики
- Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
- Работа с датой и временем в Java: Date, SimpleDateFormat, printf, GregorianCalendar
- Полное руководство по дате и времени в C++
- Java 10: временная версияция для предсказуемых полугодовых обновлений
- Java 8: Новый надежный Date/Time API — Полное руководство