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