Подтвердить что ты не робот

Datetime тип данных в java

Какой тип данных я могу использовать в Java для хранения текущей даты и времени?. Я хочу сохранить datetime в db, а также иметь поле в java bean, чтобы это удержать.

это java.util.Date?

4b9b3361

Ответ 1

java.util.Date представляет собой мгновенное время без ссылки на конкретный часовой пояс или систему календаря. Он держит как дату, так и время - это в основном несколько миллисекунд с эпохи Unix.

В качестве альтернативы вы можете использовать java.util.Calendar, который знает обо всех этих вещах.

Лично я настоятельно рекомендую вам использовать Joda Time, который является гораздо более богатым API даты/времени. Это позволяет вам более четко выражать свои данные, используя типы "только даты", "только локальные времена", "локальная дата/время", "мгновенный", "дата/время с часовым поясом" и т.д. Большинство типов также являются неизменяемыми, что является огромным преимуществом с точки зрения ясности кода.

Ответ 2

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);
}

Ответ 4

java.time

Рамка 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 при проектировании столбцов таблицы в своей базе данных.

Ответ 5

Зависит от СУБД или даже драйвера JDBC.

В большинстве случаев вы можете использовать java.sql.Timestamp большую часть времени вместе с подготовленным выражением:

pstmt.setTimestamp( index, new Timestamp( yourJavaUtilDateInstance.getTime() );

Ответ 6

Я использовал этот импорт:

import java.util.Date;

И объявила мою переменную следующим образом:

Date studentEnrollementDate;

Ответ 8

Начиная с Java 8, кажется, что стандартная библиотека java.time - это путь. Из Joda time веб-страница:

Обратите внимание, что из Java SE 8 и далее пользователям предлагается перейти на java.time(JSR-310) - основную часть JDK, которая заменяет этот проект.


Вернемся к вашему вопросу. Если бы вы использовали Java 8, я думаю, вы хотите LocalDateTime. Поскольку он содержит дату и время суток, но не знает о часовом поясе или какой-либо контрольной точке во времени, такой как эпоха unix.