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

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

Ответ 1

из JDK: javax.sql.Date:

Тонкая обертка вокруг миллисекундного значения, которая позволяет JDBC идентифицировать это как значение DATE SQL. Значение миллисекунды представляет собой число миллисекунд, прошедших с момента January 1, 1970 00:00:00.000 GMT.

Чтобы соответствовать определению SQL DATE, значения миллисекунды завернутый экземпляром java.sql.Date, должен быть "нормализован", установив часы, минуты, секунды и миллисекунды до нуля в конкретный часовой пояс, с которым связан экземпляр.

или JodaTime: DateMidnight или LocalDate (спасибо @cdeszaq)

DateMidnight определяет дату, когда компонент времени фиксирован в полночь. Класс использует часовой пояс, поэтому полночь является локальной, если только Используется часовой пояс UTC.

Важно подчеркнуть, что этот класс представляет время полночь в любой день. Обратите внимание, что полночь определяется как 00:00, который находится в самом начале дня.

Ответ 2

Класс даты. Он содержит временную метку UNIX. В большинстве баз данных вы также можете указать поле для хранения метки времени. Вы можете использовать DateFormat, чтобы отформатировать временную метку, как хотите.

Ответ 3

Используйте Date класс, который доступен.

Ответ 4

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

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

Date date= new Date();

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

Ответ 5

К сожалению, java.util.Date - это нечто, что в SQL имеет имя Timestamp. Нет чистого типа только для Date, javax.sql.Date extends java.util.Date и использование этого типа для манипуляции датой в Java не дает вам преимуществ.

Я имею дело с этим, используя apache commons-lang class DateUtils:

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

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

Ответ 6

Использовать класс даты. Это лучший способ.

Ответ 7

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

Ответ 8

Другие ответы устарели.

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

java.time

Структура java.time встроена в Java 8 и более поздних версий. См. Учебник Oracle. Большая часть функциональных возможностей java.time back-ported для Jave 6 и 7 и далее адаптированный для Android.

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

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

Текстовое представление

Метод toString генерирует строку со стандартным ISO 8601.

localDate.toString() → 2012-12-07

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

SQL

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

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

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

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

LocalDate localDate = sqlDate.toLocalDate();

Поиск

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