Как конвертировать java.утиль.Дата на Яве.язык SQL.Свидание?



Я пытаюсь использовать java.util.Date в качестве входных данных, а затем создать запрос с ним-так что мне нужно java.sql.Date.



Я был удивлен, обнаружив, что он не может сделать преобразование неявно или явно - но я даже не знаю, как бы я это сделал, так как Java API все еще довольно новый для меня.

501   17  

17 ответов:

tl; dr

как конвертировать java.утиль.Дата на Яве.язык SQL.Свидание?

нет. оба класса устарели.

  • использовать java.время классы вместо legacy java.util.Date & java.sql.Date С JDBC 4.2 или более поздней.
  • конвертировать в / из java.время, если взаимодействие с кодом еще не обновлено до java.время.

пример запроса с PreparedStatement.

myPreparedStatement.setObject( 
    … ,                                         // Specify the ordinal number of which argument in SQL statement.
    myJavaUtilDate.toInstant()                  // Convert from legacy class `java.util.Date` (a moment in UTC) to a modern `java.time.Instant` (a moment in UTC).
        .atZone( ZoneId.of( "Africa/Tunis" ) )  // Adjust from UTC to a particular time zone, to determine a date. Instantiating a `ZonedDateTime`.
        .toLocalDate()                          // Extract a date-only `java.time.LocalDate` object from the date-time `ZonedDateTime` object.
)

замена:

  • Instant вместо java.util.Date
    оба представляют момент в UTC. но теперь с наносекундами вместо миллисекунд.
  • LocalDate вместо java.sql.Date
    оба представляют значение только для даты без времени суток и без часового пояса.

подробности

если вы пытаетесь работать только со значениями даты (нет времени суток, нет часового пояса), используйте LocalDate

Фигу....

public class MainClass {

  public static void main(String[] args) {
    java.util.Date utilDate = new java.util.Date();
    java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
    System.out.println("utilDate:" + utilDate);
    System.out.println("sqlDate:" + sqlDate);

  }

}

объясняет он. Ссылка есть http://www.java2s.com/Tutorial/Java/0040__Data-Type/ConvertfromajavautilDateObjecttoajavasqlDateObject.htm

С другим ответом у вас могут возникнуть проблемы с информацией о времени (сравните даты с неожиданными результатами!)

Я предлагаю:

java.util.Calendar cal = Calendar.getInstance();
java.util.Date utilDate = new java.util.Date(); // your util date
cal.setTime(utilDate);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);    
java.sql.Date sqlDate = new java.sql.Date(cal.getTime().getTime()); // your sql date
System.out.println("utilDate:" + utilDate);
System.out.println("sqlDate:" + sqlDate);

эта функция возвращает преобразованную дату SQL из объекта даты java.

public java.sql.Date convertJavaDateToSqlDate(java.util.Date date) {
    return new java.sql.Date(date.getTime());
}

преобразование java.util.Data to java.sql.Data потеряли час,минуту и секунду. Поэтому если это возможно, я предлагаю вам использовать java.sql.Timestamp такой:

prepareStatement.setTimestamp(1, new Timestamp(utilDate.getTime()));

для получения дополнительной информации, вы можете проверить этот вопрос.

в моем случае выбор даты из JXDatePicker (Java calender) и получение его хранится в базе данных как тип даты SQL, ниже работает нормально ..

java.sql.Date date = new java.sql.Date(pickedDate.getDate().getTime());

где pickedDate является объектом JXDatePicker

эта функция возвращает преобразованную дату SQL из объекта даты java.

public static java.sql.Date convertFromJAVADateToSQLDate(
            java.util.Date javaDate) {
        java.sql.Date sqlDate = null;
        if (javaDate != null) {
            sqlDate = new Date(javaDate.getTime());
        }
        return sqlDate;
    }

форматирование java.утиль.Сначала свидание. Затем используйте форматированную дату, чтобы получить дату в java.язык SQL.Дата

java.util.Date utilDate = "Your date"
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
final String stringDate= dateFormat.format(utilDate);
final java.sql.Date sqlDate=  java.sql.Date.valueOf(stringDate);

вот пример преобразования Util Date в Sql date и ya это один из примеров того, что я использую в моем проекте может быть полезно для вас тоже.

java.util.Date utilStartDate = table_Login.getDob();(orwhat ever date your give form obj)
java.sql.Date sqlStartDate = new java.sql.Date(utilStartDate.getTime());(converting date)

Я новичок: после долгой беготни это сработало. Мысль может быть полезна

     String bufDt =  bDOB.getText();  //data from form
     DateFormat dF = new SimpleDateFormat("dd-MM-yyyy"); //data in form is in this format
     Date bbdt = (Date)dF.parse(bufDt);  // string data is converted into java util date
     DateFormat dsF = new SimpleDateFormat("yyyy-MM-dd"); //converted date is reformatted for conversion to sql.date
     String ndt = dsF.format(bbdt); // java util date is converted to compatible java sql date
     java.sql.Date sqlDate=  java.sql.Date.valueOf(ndt);  // finally data from the form is convered to java sql. date for placing in database

метод сравнения 2 дат (util.дата или SQL.дата)

 public static boolean isSameDay(Date a, Date b) {
    Calendar calA = new GregorianCalendar();
    calA.setTime(a);

    Calendar calB = new GregorianCalendar();
    calB.setTime(b);

    final int yearA = calA.get(Calendar.YEAR);
    final int monthA = calA.get(Calendar.MONTH);
    final int dayA = calA.get(Calendar.DAY_OF_YEAR);

    final int yearB = calB.get(Calendar.YEAR);
    final int monthB = calB.get(Calendar.MONTH);
    final int dayB = calB.get(Calendar.DAY_OF_YEAR);

    return yearA == yearB && monthA == monthB && dayA == dayB;
}

попробуйте это

public static String toMysqlDateStr(Date date) {
    String dateForMySql = "";
    if (date == null) {
        dateForMySql = null;
    } else {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        dateForMySql = sdf.format(date);
    }

    return dateForMySql;
}

Я думаю, что лучший способ, чтобы преобразовать это:

static java.sql.Timestamp SQLDateTime(Long utilDate) {
    return new java.sql.Timestamp(utilDate);
}

Date date = new Date();
java.sql.Timestamp dt = SQLDateTime(date.getTime());

Если вы хотите вставить dt переменная в таблицу SQL вы можете сделать:

insert into table (expireAt) values ('"+dt+"');

Я использую следующий код, пожалуйста, попробуйте его

DateFormat fm= new SimpleDateFormatter();

укажите формат нужной даты например "DD-MM_YYYY" или 'YYYY-mm-dd' затем используйте тип данных java Date как

fm.format("object of java.util.date");

тогда он будет анализировать вашу дату

вы можете использовать этот метод для преобразования util date в sql date,

DateUtilities.convertUtilDateToSql(java.util.Date)

Я пробовал следующий код, который работал нормально.

java.утиль.Дата utilDate = новая java.утиль.Дата();
java.язык SQL.Дата sqlDate = новая java.язык SQL.Дата(utilDate);

Если вы usgin Mysql столбец даты может быть передан строковое представление этой даты

поэтому я использую класс DateFormatter для его форматирования, а затем устанавливаю его в виде строки в инструкции sql или подготовленной инструкции

вот иллюстрация кода:

private String converUtilDateToSqlDate(java.util.Date utilDate) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String sqlDate = sdf.format(utilDate);
    return sqlDate;
}

строка date = converUtilDateToSqlDate (otherTransaction.getTransDate ());

//затем передайте эту дату в инструкцию sql

Comments

    Ничего не найдено.