Nano Hash - криптовалюты, майнинг, программирование

Как сохранить дату Java в Mysql datetime с помощью JPA

Может ли кто-нибудь сказать мне, как я могу сохранить дату Java в Mysql datetime ...?

Когда я пытаюсь это сделать ... сохраняется только дата, а время остается 00:00:00 в таких хранилищах дат Mysql ...

2009-09-22 00:00:00

Хочу не только дату, но и время ... как

2009-09-22 08:08:11

Я использую JPA (Hibernate) с классами spring mydomain, использующими java.util.Date, но я создал таблицы, используя рукописные запросы ...

это мой оператор создания

CREATE TABLE ContactUs (
  id BIGINT AUTO_INCREMENT, 
  userName VARCHAR(30), 
  email VARCHAR(50),
  subject VARCHAR(100), 
  message VARCHAR(1024), 
  messageType VARCHAR(15), 
  contactUsTime DATETIME,
  PRIMARY KEY(id)
);
08.03.2010

  • куски вашего кода, возможно? 08.03.2010
  • ссылка: coderanch.com/t/304851/ JDBC / java / 08.03.2010
  • В наши дни вам вообще не следует использовать java.util.Date (в 2010 году, вероятно, не было лучшего выбора). Лучше использовать современные классы, такие как java.time.Instant или java.time.LocalDateTime, в зависимости от точных требований к дате и времени, которые вам нужно сохранить. 13.08.2017
  • Некоторые из этих старых ответов занимают довольно высокие позиции в рейтинге Google. В Java 8+ мы можем просто использовать LocalDateTime для сохранения datetime вместо того, чтобы прибегать к использованию @Temporal для сохранения в формате datetime. 31.08.2017
  • prepareStatement.setTimestamp (1, новая отметка времени (System.currentTimeMillis ())); 12.12.2018

Ответы:


1

см. по ссылке:

http://www.coderanch.com/t/304851/JDBC/java/Java-date-MySQL-date-conversion

Следующий код только что решил проблему:

java.util.Date dt = new java.util.Date();

java.text.SimpleDateFormat sdf = 
     new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String currentTime = sdf.format(dt);

Это "currentTime" было вставлено в столбец типа DateTime, и это было успешно.

08.03.2010
  • но currentTime - это объект String, а в db мы принимаем datetime как тип данных, я думаю, что он не будет вставлен. верно? 08.05.2014
  • yyyy-MM-dd HH:mm:ss очень важно. Обратите внимание на заглавные буквы. 31.12.2015

  • 2

    Аннотируйте свое поле (или получатель) с помощью @Temporal(TemporalType.TIMESTAMP), например:

    public class MyEntity {
        ...
        @Temporal(TemporalType.TIMESTAMP)
        private java.util.Date myDate;
        ...
    }
    

    Это должно делать свое дело.

    09.03.2010
  • Это действительно ответ! 09.07.2013
  • для этого, это правильный ответ. 18.11.2014
  • имейте в виду, что если вы выберете это решение, ваша дата будет отображаться как отметка времени при получении из базы данных. У него не будет красивого форматирования "гггг-ММ-дд ....") 05.08.2016

  • 3

    Возможно, вы используете java.sql.Date? Хотя этот класс Java имеет миллисекундную гранулярность (это подкласс java.util.Date, плохое дизайнерское решение), он будет интерпретироваться драйвером JDBC как дата без компонента времени. Вместо этого вы должны использовать java.sql.Timestamp.

    08.03.2010
  • Я бы не стал использовать java.sql.Date или java.sql.Timestamp в доменных классах, но полагаю, это было написано до редактирования OP. 09.03.2010
  • Я буду. Объекты java.util.Date не сравниваются с объектами java.sql.Timestamp с полностью предсказуемыми результатами. 06.08.2011

  • 4

    Вероятно потому, что ваша дата Java имеет формат, отличный от формата mysql format (YYYY-MM-DD HH:MM:SS )

    сделай это

     DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
     Date date = new Date();
     System.out.println(dateFormat.format(date));
    
    08.03.2010
  • Вы упомянули правильный формат в справочнике, а затем использовали неправильный формат в коде. 14.01.2020

  • 5

    вы получите 2011-07-18 + формат времени

    long timeNow = Calendar.getInstance().getTimeInMillis();
    java.sql.Timestamp ts = new java.sql.Timestamp(timeNow);
    ...
    preparedStatement.setTimestamp(TIME_COL_INDEX, ts);
    
    08.03.2011

    6

    mysql datetime -> GregorianCalendar

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = format.parse("2012-12-13 14:54:30"); // mysql datetime format
    GregorianCalendar calendar = new GregorianCalendar();
    calendar.setTime(date);
    System.out.println(calendar.getTime());
    

    GregorianCalendar -> MySQL datetime

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String string = format.format(calendar.getTime());
    System.out.println(string);
    
    25.12.2012

    7

    Используйте следующий код, чтобы вставить дату в MySQL. Вместо того, чтобы изменять формат даты в соответствии с требованиями MySql, мы можем помочь базе данных распознать нашу дату, установив параметры STR_TO_DATE(?, '%l:%i %p').

    Например, 2014-03-12 можно представить как STR_TO_DATE('2014-03-12', '%Y-%m-%d')

    preparedStatement = connect.prepareStatement("INSERT INTO test.msft VALUES (default, STR_TO_DATE( ?, '%m/%d/%Y'), STR_TO_DATE(?, '%l:%i %p'),?,?,?,?,?)"); 
    
    12.03.2014

    8

    Это очень просто, хотя условия в этом ответе находятся в mysql, тип данных столбца - datetime, и вы хотите отправить данные из кода java в mysql:

    java.util.Date dt = new java.util.Date ();
    whatever your code object may be.setDateTime (dt);

    Важно просто выбрать дату и ее формат уже в соответствии с форматом mysql и отправить ее, никаких дополнительных изменений не требуется.

    15.05.2017

    9

    На самом деле вы не можете использовать SimpleDateFormat, вы можете использовать что-то вроде этого;

      @JsonSerialize(using=JsonDateSerializer.class)
      @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy HH:mm:ss")
      private Date blkDate;
    

    Таким образом, вы можете напрямую получить дату в указанном формате.

    20.12.2016

    10

    Я все еще предпочитаю метод в одну строку

    new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime())
    
    14.06.2019

    11

    меня устраивает !!

    в таблице mysql

    DATETIME
    

    в сущности:

    private Date startDate;
    

    в процессе:

    objectEntity.setStartDate(new Date());
    

    в подготовленном заявлении:

    pstm.setDate(9, new java.sql.Date(objEntity.getStartDate().getTime()));
    
    20.11.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..