Тип данных Java для хранения только даты

Какой тип данных в Java может содержать только дату и не требует компонента времени? Например, просто хранить12/07/2012, Я работаю с сохранением данных в / из базы данных, которая имеет тип данных только для даты, поэтому я ищу лучший эквивалентный тип данных в Java.

Ответы на вопрос(8)

Старые классы даты и времени общеизвестно хлопотны, и их следует избегать.

java.time

java.time фреймворк встроен в Java 8 и выше. УвидетьOracle Tutorial, Большая часть функциональности java.timeобратно портированы на Jave 6 & amp; 7 и далееадаптирован под Android.

LocalDate класс представляет значение только для даты без времени суток и без часового пояса.

LocalDate localDate = LocalDate.of( 2012 , 12 , 7 );
Textual representation

toString Метод генерирует строку, используя стандартISO 8601 формат.

localDate.toString() → 2012-12-07

Для других форматов используйтеDateTimeFormatter.

SQL

Драйверы JDBC совместимый сJDBC 4.2 можно использоватьgetObject а такжеsetObject методы прямой выборки / передачи типов java.time, таких какLocalDate в тип SQLDATE.

Если ваш драйвер не может этого сделать, вернитесь к использованию типов java.sql. Новые методы были добавлены к старым классам, чтобы облегчить преобразование.

java.sql.Date sqlDate = java.sql.Date.valueOf( localDate );

И другое направление.

LocalDate localDate = sqlDate.toLocalDate();
Search Stack Overflow

Переполнение стека поиска дляmany дополнительные обсуждения и примеры использования java.time. Например,мой ответ вэтот похожий вопрос.

Показывает, как держат только дату (без времени)

formatter = new SimpleDateFormat("dd/MM/yyyy");

Date date= new Date();

Date todayWithOutTime =formatter.parse(formatter.format(date));

Используйте класс Date. Это лучший способ.

использованиеДата класс, который доступен.

Unfortu, natelly,java.util.Date это то, что в SQL есть имяTimestamp, Нет чистого типа только для даты,javax.sql.Date продолжаетсяjava.util.Date и использование этого типа для манипулирования датой в Java не дает вам никаких преимуществ.

Я имею дело с этим с помощью Apachecommons-lang учебный классDateUtils:

Date myDate = DateUtils.truncate(timestamp, Calendar.DAY_OF_MONTH);

Это удалит часть времени и оставит только часть даты.

Решение Вопроса

из JDK:java.sql.Date:

A thin wrapper around a millisecond value that allows JDBC to identify this as an SQL DATE value. A milliseconds value represents the number of milliseconds that have passed since January 1, 1970 00:00:00.000 GMT.

To conform with the definition of SQL DATE, the millisecond values wrapped by a java.sql.Date instance must be 'normalized' by setting the hours, minutes, seconds, and milliseconds to zero in the particular time zone with which the instance is associated.

или изJodaTime: DateMidnight или жеLocalDate (Спасибо @cdeszaq)

DateMidnight defines a date where the time component is fixed at midnight. The class uses a time zone, thus midnight is local unless a UTC time zone is used.

It is important to emphasise that this class represents the time of midnight on any given day. Note that midnight is defined as 00:00, which is at the very start of a day.

 11 апр. 2016 г., 17:37
Классы и методы, относящиеся к полуночи, устарели и не должны использоваться. УвидетьwithTimeAtStartOfDay метод. Кроме того, создатели Joda-Time посоветовали нам перейти на фреймворк java.time.
 18 июн. 2012 г., 16:06
@cdeszaq спасибо за подсказку
 18 июн. 2012 г., 15:52
+1 за ссылку на JodaTime. Есть такжеLocalDate класс в JodaTime, представляющий только компонент даты. Он не совсем идеально подходит, но в прошлом он работал для моих нужд.

ы также можете указать поле для хранения метки времени. Вы можете использовать DateFormat для форматирования метки времени, как вы хотите.

Если вы используете Java 8, вы можете использоватьjava.time.LocalDate.

Ваш ответ на вопрос