Ответ
Да, большая часть конструкторов и методов класса java.util.Date помечена как deprecated с версии JDK 1.1. Его основной недостаток — мутабельность и плохой дизайн API.
Современная альтернатива — java.time (Java 8+):
// Устаревший подход (не используйте)
Date oldDate = new Date(); // Конструктор deprecated
oldDate.setYear(124); // Мутабельный и небезопасный
// Современный подход с java.time
LocalDate date = LocalDate.now(); // Только дата
LocalDateTime dateTime = LocalDateTime.now(); // Дата и время
ZonedDateTime zoned = ZonedDateTime.now(ZoneId.of("Europe/Moscow")); // С часовым поясом
// Преимущества java.time:
// 1. Неизменяемость (immutable) — потокобезопасность.
// 2. Чёткое разделение типов (LocalDate, LocalTime, ZonedDateTime).
// 3. Богатый и интуитивный API для манипуляций.
// 4. Поддержка часовых поясов и летнего времени.
Конвертация для работы со старым кодом:
// Date -> java.time
Date oldDate = new Date();
Instant instant = oldDate.toInstant();
LocalDateTime newDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
// java.time -> Date
LocalDateTime now = LocalDateTime.now();
Date date = Date.from(now.atZone(ZoneId.systemDefault()).toInstant());
Для всех новых проектов используйте исключительно java.time.