В Java дата представлена в основном тремя классами:
- java.time.LocalDate: является частью нового API даты и времени Java 8. Он содержит только части даты(день, месяц, год) и не содержит части времени(часы, минуты и секунды).
- java.util.Date: Это устаревший класс, использовавшийся до версии Java 8. Он содержал как дату, так и время. Он хранит количество миллисекунд с начала эпохи(1 января 1970 г., 00:00:00 GMT).
- java.sql.Date: Это также унаследованный класс и подкласс java.util.Date. Он специально разработан для работы с базами данных через JDBC API. Его можно использовать в качестве дат SQL и передавать даты между базами данных Java и SQL без потери информации о времени. Он переопределяет методы java.util.Date для обработки только части даты, фактически устанавливая компонент времени на полночь(00:00:00).
В этом уроке мы научимся конвертировать LocalDate в java.sql.Date и наоборот.
1. java.sql.Дата -> ЛокальнаяДата
Используйте метод java.sql.Date.toLocalDate() для получения LocalDate из java.sql.Date.
В следующем примере мы сначала создаем экземпляр java.sql.Date. В нашем приложении мы можем получить его из базы данных. Затем мы вызываем sqlDate.toLocalDate(), чтобы получить экземпляр LocalDate.
//Get SQL date instancejava.sql.Date sqlDate = new java.sql.Date(new Date().getTime());//Get LocalDate from SQL dateLocalDate localDate = sqlDate.toLocalDate();System.out.println( localDate ); //2022-01-15
2. Преобразовать LocalDate в java.sql.Date
Используйте метод java.sql.Date.valueOf() для получения даты SQL из LocalDate.
В следующем примере мы сначала создаем экземпляр java.time.LocalDate. В нашем приложении мы можем получить его из метода или создать его самостоятельно. Затем мы вызываем sqlDate.valueOf(), чтобы получить экземпляр Date. Обратите внимание, что valueOf() — это статический метод, поэтому его можно вызвать напрямую из ссылки на класс.
//Local date instanceLocalDate localDate = LocalDate.now();//Get LocalDate from SQL datejava.sql.Date sqlDate = java.sql.Date.valueOf( localDate );System.out.println( sqlDate ); //2022-01-15