Какой тип данных я могу использовать в Java для хранения текущей даты и времени?. Я хочу сохранить datetime в db, а также иметь поле в java bean, чтобы это удержать.
это java.util.Date
?
Какой тип данных я могу использовать в Java для хранения текущей даты и времени?. Я хочу сохранить datetime в db, а также иметь поле в java bean, чтобы это удержать.
это java.util.Date
?
java.util.Date
представляет собой мгновенное время без ссылки на конкретный часовой пояс или систему календаря. Он держит как дату, так и время - это в основном несколько миллисекунд с эпохи Unix.
В качестве альтернативы вы можете использовать java.util.Calendar
, который знает обо всех этих вещах.
Лично я настоятельно рекомендую вам использовать Joda Time, который является гораздо более богатым API даты/времени. Это позволяет вам более четко выражать свои данные, используя типы "только даты", "только локальные времена", "локальная дата/время", "мгновенный", "дата/время с часовым поясом" и т.д. Большинство типов также являются неизменяемыми, что является огромным преимуществом с точки зрения ясности кода.
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
private String getDateTime() {
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
return dateFormat.format(date);
}
+1 рекомендация для Йода-времени. Если вы планируете делать что-то большее, чем простой пример Hello World, я предлагаю прочитать это:
Рамка java.time, встроенная в Java 8 и более поздние версии, заменяет старые классы дат, в которые входят самые ранние версии Java и библиотека Joda-Time. Классы java.time были перенесены на Java 6 и 7 и на Android.
Класс Instant
представляет момент на временной шкале в UTC с разрешением наносекунд.
Instant instant = Instant.now();
Примените смещение-от-UTC (количество часов и возможные минуты и секунды), чтобы получить OffsetDateTime
.
ZoneOffset offset = ZoneOffset.of( "-04:00" );
OffsetDateTime odt = OffsetDateTime.ofInstant( instant , offset );
Лучше всего применять полный часовой пояс, который является смещением плюс набор правил для обработки аномалий, таких как летнее время (DST).
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Будем надеяться, что драйверы JDBC будут обновлены для работы непосредственно с java.time. До тех пор мы должны использовать классы java.sql для перемещения значений даты и времени в/из базы данных. Но ограничьте использование классов java.sql для работы с базой данных. Не используйте их для бизнес-логики. В рамках старых классов времени они плохо разработаны, запутывают и хлопот.
Используйте новые методы, добавленные к старым классам для преобразования в/из java.time. Найдите методы to…
и valueOf
.
Используйте класс java.sql.Timestamp
для значений даты и времени.
java.sql.Timestamp ts = java.sql.Timestamp.valueOf( instant );
И идем в другую сторону...
Instant instant = ts.toInstant();
Для данных даты и времени вы практически всегда хотите тип данных TIMESTAMP WITH TIME ZONE
, а не WITHOUT
при проектировании столбцов таблицы в своей базе данных.
Зависит от СУБД или даже драйвера JDBC.
В большинстве случаев вы можете использовать java.sql.Timestamp большую часть времени вместе с подготовленным выражением:
pstmt.setTimestamp( index, new Timestamp( yourJavaUtilDateInstance.getTime() );
Я использовал этот импорт:
import java.util.Date;
И объявила мою переменную следующим образом:
Date studentEnrollementDate;
Вы можете использовать Календарь.
Calendar rightNow = Calendar.getInstance();
Начиная с Java 8, кажется, что стандартная библиотека java.time
- это путь. Из Joda time веб-страница:
Обратите внимание, что из Java SE 8 и далее пользователям предлагается перейти на java.time(JSR-310) - основную часть JDK, которая заменяет этот проект.
Вернемся к вашему вопросу. Если бы вы использовали Java 8, я думаю, вы хотите LocalDateTime
. Поскольку он содержит дату и время суток, но не знает о часовом поясе или какой-либо контрольной точке во времени, такой как эпоха unix.