Избегайте устаревших классов даты и времени
java.sql. Дата до java.util.Date
Эти ужасные классы были вытеснены много лет назад, но java.time классы.
java.time
Для значения только для даты, без времени суток и без часового пояса используйте класс LocalDate
в Java.В вашей базе данных используйте тип данных в вашем столбце, аналогичный стандарту SQL DATE
.
Вы, очевидно, использовали в своей базе данных неправильный тип , который сочетает дату с временем суток и, возможно, с часовым поясом.
Вы не показали нам достаточно деталей для правильного решения.Но, скорее всего, вы смешиваетесь в часовом поясе , возможно, неявно, когда переводите свою дату только в дату-время.Кажется, что это часовой пояс, например America/Noronha
, Atlantic/South_Georgia
или America/Miquelon
.
Обработка даты и времени с помощью JDBC и java.time описана много-много раз, поэтому ищите переполнение стека , чтобы узнать гораздо больше.
Отсчет от эпохи
Что касается вашего загадочного числа, то оно представляется числом миллисекунд с момента обращения эпохи первого момента 1970 UTC, 1970-01-01T00: 00: 00Z.
long input = 902_268_000_000L ;
Instant instant = Instant.ofEpochMilli( input ) ;
Вы можете запустить этот код в прямом эфире на IdeOne.com .
instant.toString (): 1998-08-04T22: 00: 00Z
Смарт-объекты, а не немые строки
1998-08-05
Мне не нужно было выполнять какие-либо преобразования, когда я выполнял POST
Что YYYY-MM-DD является форматом по умолчанию, используемым в SQL (и в ISO 8601стандарт, кстати).Очевидно, вы отправляете простые строки в вашу базу данных.Научитесь использовать умные объекты, а не тупые строки при взаимодействии с вашей базой данных.
Начиная с JDBC 4.2 вы можете обмениваться типами java.time с базой данных с помощью методов getObject
& setObject
.
LocalDate ld = LocalDate.parse( "1998-08-05" ) ; // For a column of type `DATE`.
myPreparedStatement.setObject( … , ld ) ;
Извлечение.
LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ; // For a column of type `DATE`.
О java.time
Платформа java.time встроена в Java 8 и более поздние версии.Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
и & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .
Вы можете обмениваться java.time объектами напрямую с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .