prepareStatement.setTimestamp (1, новая отметка времени (System.currentTimeMillis ()));
Раджат
Какую ошибку вы получаете?
Роберт Колумбия
К вашему сведению, ужасно неприятные старые классы даты и времени, такие как SimpleDateFormatи java.sql.Timestampтеперь унаследованные , вытеснены классами java.time, встроенными в Java 8 и более поздние версии . Смотрите Учебник по Oracle .
Василий Бурк
Ответы:
202
замещать
newTimestamp();
с участием
new java.util.Date()
потому что нет конструктора по умолчанию для Timestamp, или вы можете сделать это с помощью метода:
Это помогло мне, и я сделал некоторые изменения, поэтому мне не нужно импортировать new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date())
Pini Cheyni
Лучше new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(new Date());
Zon
36
ТЛ; др
Используйте только современные классы java.time . Никогда не используйте ужасные устаревшие классы , такие как SimpleDateFormat, Dateили java.sql.Timestamp.
ZonedDateTime// Represent a moment as perceived in the wall-clock time used by the people of a particular region ( a time zone)..now(// Capture the current moment.ZoneId.of("Africa/Tunis")// Specify the time zone using proper Continent/Region name. Never use 3-4 character pseudo-zones such as PDT, EST, IST. )// Returns a `ZonedDateTime` object. .format(// Generate a `String` object containing text representing the value of our date-time object. DateTimeFormatter.ofPattern("uuuu.MM.dd.HH.mm.ss"))// Returns a `String`.
Или используйте текущий часовой пояс JVM по умолчанию.
Типы java.sql, такие как java.sql.Timestamp, должны использоваться только для передачи в базу данных и из нее . Немедленно конвертируйте в java.time типы в Java 8 и более поздних версиях.
java.time.Instant
java.sql.TimestampКарты к java.time.Instant, момент на шкале времени в формате UTC. Обратите внимание на новый метод преобразования, toInstantдобавленный к старому классу.
Этот конкретный формат является неоднозначным в отношении его точного значения, поскольку в нем отсутствует указание на смещение от UTC или часовой пояс.
ISO 8601
Если у вас есть какое-либо мнение по этому вопросу, я предлагаю вам рассмотреть возможность использования стандартных форматов ISO 8601 , а не использовать свои собственные. Стандартный формат очень похож на ваш. Например: 2016-02-20T03:26:32+05:30.
Классы java.time по умолчанию используют эти стандартные форматы, поэтому не нужно указывать шаблон. ZonedDateTimeКласс расширяет стандартный формат путем добавления имени временной зоны (мудрая улучшение).
Чтобы узнать больше, смотрите Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или более поздней версии . Нет необходимости в строках, нет необходимости в java.sql.*классах.
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как Interval, YearWeek, YearQuarter, и более .
Так что же является правильным способом получить текущую отметку времени настенных часов в формате "гггг.ММ.Дд.ЧЧ.мм.сс"? Без явного указания жестко запрограммированной строки моего местного часового пояса? Это то, что спрашивал
автор
@ t7ko Я добавил строку примера кода в раздел tl; dr, показывающую, как явно запросить текущий часовой пояс JVM по умолчанию. Вызов `now () 'без каких-либо аргументов делает то же самое, но неясно, если вы намеревались использовать значение по умолчанию или если вы не знали или забыли о критической проблеме часового пояса.
Василий Бурк
32
Вы можете использовать java.util.Date вместо Timestamp:
Более подходящий подход - указать регион Locale в качестве параметра в конструкторе. В приведенном ниже примере используется регион США Locale. Форматирование даты зависит от локали и использует локаль для адаптации информации, относящейся к обычаям и соглашениям региона пользователя. Языковой стандарт (Java Platform SE 7)
Нет такой вещи, как «Locale Zone». Я подозреваю, что вы сбиваете с толку Localeи часовой пояс, которые не связаны. Localeконтролирует культурные нормы форматирования и человеческий язык, используемый для названия месяца / дня. Часовой пояс регулирует дату-представление времени , чтобы соответствовать каким - нибудь областям времени на стену часов . В случае с этим Вопросом, Локаль не имеет значения, так как нет проблем с форматированием, с помощью которых можно применять культурные нормы, а также нет названий месяцев / дней для локализации на какой-либо конкретный человеческий язык.
Базилик Бурк
@BasilBourque Спасибо за ваш вклад. Я обновил ответ, чтобы быть более явным
user3144836
4
Вы можете использовать следующее
new java.sql.Timestamp(System.currentTimeMillis()).getTime()Result:1539594988651
Надеюсь, это поможет. Просто мое предложение, а не за бонусные баллы.
У него нет запрошенного формата строки. Кроме того, я боюсь, что единственное, что он добавляет к паре подобных ответов, - это ненужные осложнения ...
Оле В.В.
4
Используйте современные java.timeклассы, если вы используете Java 8 или новее.
String s =DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
Ответ Бэзила Бурка довольно хорош. Но это слишком долго. Многие люди не будут терпеливо читать это. Лучшие 3 ответа слишком стары и могут ввести в заблуждение новичка Java. Так что я предоставляю этот короткий и современный ответ для новых разработчиков. Надеюсь, что этот ответ может уменьшить использование ужасных SimpleDateFormat.
SimpleDateFormat
иjava.sql.Timestamp
теперь унаследованные , вытеснены классами java.time, встроенными в Java 8 и более поздние версии . Смотрите Учебник по Oracle .Ответы:
замещать
с участием
потому что нет конструктора по умолчанию для
Timestamp
, или вы можете сделать это с помощью метода:источник
java.util.Date
иjava.sql.Timestamp
теперь унаследованные , вытеснены классами java.time, встроенными в Java 8 и более поздние версии . Смотрите Учебник по Oracle .Используйте
java.util.Date
класс вместо метки времени.Вы получите текущую дату в указанном формате.
источник
new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date())
new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(new Date())
;ТЛ; др
Используйте только современные классы java.time . Никогда не используйте ужасные устаревшие классы , такие как
SimpleDateFormat
,Date
илиjava.sql.Timestamp
.Или используйте текущий часовой пояс JVM по умолчанию.
java.time & JDBC 4.2
Современный подход использует java.time классы как показано выше.
Если ваш драйвер JDBC соответствует JDBC 4.2 , вы можете напрямую обмениваться объектами java.time с базой данных. Используйте
PreparedStatement::setObject
иResultSet::getObject
.Используйте java.sql только для драйверов до JDBC 4.2
Если ваш драйвер JDBC еще не соответствует JDBC 4.2 для поддержки типов java.time , вы должны использовать классы java.sql.
Хранение данных.
Извлечение данных.
Типы java.sql, такие как
java.sql.Timestamp
, должны использоваться только для передачи в базу данных и из нее . Немедленно конвертируйте в java.time типы в Java 8 и более поздних версиях.java.time.Instant
java.sql.Timestamp
Карты кjava.time.Instant
, момент на шкале времени в формате UTC. Обратите внимание на новый метод преобразования,toInstant
добавленный к старому классу.Часовой пояс
Примените желаемый / ожидаемый часовой пояс (
ZoneId
), чтобы получитьZonedDateTime
.Форматированные строки
Используйте
DateTimeFormatter
для генерации вашей строки. Коды шаблонов аналогичны кодам,java.text.SimpleDateFormat
но не совсем, поэтому внимательно прочитайте документацию.Этот конкретный формат является неоднозначным в отношении его точного значения, поскольку в нем отсутствует указание на смещение от UTC или часовой пояс.
ISO 8601
Если у вас есть какое-либо мнение по этому вопросу, я предлагаю вам рассмотреть возможность использования стандартных форматов ISO 8601 , а не использовать свои собственные. Стандартный формат очень похож на ваш. Например:
2016-02-20T03:26:32+05:30
.Классы java.time по умолчанию используют эти стандартные форматы, поэтому не нужно указывать шаблон.
ZonedDateTime
Класс расширяет стандартный формат путем добавления имени временной зоны (мудрая улучшение).Конвертировать в java.sql
Вы можете конвертировать из java.time обратно в
java.sql.Timestamp
. ИзвлечьInstant
изZonedDateTime
.Новые методы были добавлены к старым классам, чтобы облегчить преобразование в / из классов java.time.
О java.time
Java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытеснять неприятные старые устаревшие классы даты и времени , такие как
java.util.Date
,Calendar
, иSimpleDateFormat
.Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на java.time. классы .
Чтобы узнать больше, смотрите Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или более поздней версии . Нет необходимости в строках, нет необходимости в
java.sql.*
классах.Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как
Interval
,YearWeek
,YearQuarter
, и более .источник
Вы можете использовать java.util.Date вместо Timestamp:
источник
Более подходящий подход - указать регион Locale в качестве параметра в конструкторе. В приведенном ниже примере используется регион США Locale. Форматирование даты зависит от локали и использует локаль для адаптации информации, относящейся к обычаям и соглашениям региона пользователя. Языковой стандарт (Java Platform SE 7)
источник
Locale
и часовой пояс, которые не связаны.Locale
контролирует культурные нормы форматирования и человеческий язык, используемый для названия месяца / дня. Часовой пояс регулирует дату-представление времени , чтобы соответствовать каким - нибудь областям времени на стену часов . В случае с этим Вопросом, Локаль не имеет значения, так как нет проблем с форматированием, с помощью которых можно применять культурные нормы, а также нет названий месяцев / дней для локализации на какой-либо конкретный человеческий язык.Вы можете использовать следующее
Надеюсь, это поможет. Просто мое предложение, а не за бонусные баллы.
источник
Используйте современные
java.time
классы, если вы используете Java 8 или новее.Ответ Бэзила Бурка довольно хорош. Но это слишком долго. Многие люди не будут терпеливо читать это. Лучшие 3 ответа слишком стары и могут ввести в заблуждение новичка Java. Так что я предоставляю этот короткий и современный ответ для новых разработчиков. Надеюсь, что этот ответ может уменьшить использование ужасных
SimpleDateFormat
.источник