Как конвертировать java.утиль.Дата на Яве.язык SQL.Свидание?
Я пытаюсь использовать java.util.Date в качестве входных данных, а затем создать запрос с ним-так что мне нужно java.sql.Date.
Я был удивлен, обнаружив, что он не может сделать преобразование неявно или явно - но я даже не знаю, как бы я это сделал, так как Java API все еще довольно новый для меня.
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.Datatojava.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