Научитесь преобразовывать java.util.Date в java.time.LocalDateTime и наоборот, используя простые для понимания программы Java.
1. Дата -> ЛокальнаяДатаВремя
Метод Date.getTime() возвращает миллисекунды эпохи, т.е. количество миллисекунд с 1 января 1970 года, 00:00:00 GMT. Чтобы получить LocalDateTime, нам нужно сначала установить информацию о смещении зоны местоположения пользователя, чтобы получить Instant при указанном смещении зоны.
Затем мы можем использовать метод Instant.toLocalDateTime(), который возвращает LocalDateTime с тем же годом, месяцем, днем и временем, что и заданный Instant на локальной шкале времени.
Date todayDate = new Date();LocalDateTime ldt = Instant.ofEpochMilli( todayDate.getTime() ).atZone( ZoneId.systemDefault() ).toLocalDateTime();System.out.println(ldt); //2022-01-15T11:53:31.863
2. LocalDateTime -> Дата
Нам может понадобиться использовать это преобразование только для поддержки некоторого устаревшего технического долга. Нет причин использовать класс Date в новом коде разработки.
LocalDateTime localDateTime = LocalDateTime.now();Date date = Date.from(localDateTime.atZone( ZoneId.systemDefault() ).toInstant());System.out.println(date); //Sat Jan 15 11:58:26 IST 2022
3. Методы полезности
DateUtils — это служебный класс с некоторыми статическими методами для преобразования между Date, LocalDate и LocalDateTime.
import java.time.Instant;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.ZoneId;import java.util.Date;public class DateUtils {public static Date asDate(LocalDate localDate) {return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());}public static Date asDate(LocalDateTime localDateTime) {return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());}public static LocalDate asLocalDate(Date date) {return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();}public static LocalDateTime asLocalDateTime(Date date) {return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();}}
Чтобы использовать этот класс, просто вызовите статические методы и передайте правильный аргумент.
Date date = DateUtils.asDate(LocalDateTime.now());System.out.println(date); //Sat Jan 15 12:08:44 IST 2022LocalDateTime today = DateUtils.asLocalDateTime(new Date());System.out.println(today); //2022-01-15T12:08:44.492