Преобразование даты в локальную дату

Научитесь преобразовывать данные из java.time.LocalDate в java.util.Date и наоборот, используя простые для понимания примеры Java.

1. Преобразование даты в локальную дату

Метод Date.getTime() возвращает миллисекунды эпохи, т.е. количество миллисекунд с 1 января 1970 года, 00:00:00 GMT. Чтобы получить LocalDate, нам нужно сначала установить информацию о смещении зоны местоположения пользователя, чтобы получить Instant при указанном смещении зоны.

Затем мы можем использовать метод Instant.toLocalDate(), который возвращает LocalDate с тем же годом, месяцем и днем, что и заданный Instant.

Date todayDate = new Date();LocalDate localDate = Instant.ofEpochMilli(todayDate.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();System.out.println(localDate); //2022-02-15

2. Преобразовать LocalDate в дату

Нам может понадобиться использовать это преобразование только для поддержки некоторого устаревшего технического долга. Нет причин использовать класс Date в новом коде разработки.

LocalDate localDate = LocalDate.now();Date date = Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());System.out.println(date); //Wed Feb 16 00:00:00 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();}}

Чтобы использовать этот класс, просто вызовите статические методы и передайте правильный аргумент.

import java.time.LocalDate;import java.util.Date;public class Main{public static void main(String[] args){Date date = DateUtils.asDate(LocalDate.now());System.out.println(date);LocalDate today = DateUtils.asLocalDate(new Date());System.out.println(today);}}

Исходный код на Github

Прокрутить вверх