Конвертировать XMLGregorianCalendar на сегодняшний день i.e "MM/DD/YYYY hh: mm: ss AM"
У меня есть дата в формате XMLGregorianCalendar, например "2013-05-16T09: 54: 13", которую мне нужно преобразовать в метку времени "MM/DD/YYYY чч: мм: сс AM" для вставки в таблицу базы данных оракула с использованием Java.
Как я могу сделать это на Java?
Ответы
Ответ 1
Вы можете сделать это, чтобы вернуть Date
:
calendar.toGregorianCalendar().getTime()
Я нашел код этот учебник. Оттуда вы можете использовать SimpleDateFormat, чтобы превратить его в строку в нужном вам формате.
Но если вы используете JDBC для сохранения даты в базе данных, вы, вероятно, можете напрямую передать Date
с помощью этого метода:
preparedStatement.setDate(colNum, myDate);
Ответ 2
Вот более четкий ответ:
Получить экземпляр Date из экземпляра XMLGregorianCalendar:
Date date = xmlCalendar.toGregorianCalendar().getTime();
Я нашел этот код из конвертировать XMLGregorianCalendar в дату в Java
Отформатируйте этот экземпляр даты в формате "MM/дд/гггг чч: мм: сс а", вы получите формат MM/ДД/ГГГГ чч: мм: сс AM
DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
String formattedDate = formatter.format(date)
Из даты конвертации в строку в Java
Для вставки базы данных вы должны сделать то, что предложил Даниэль
Ответ 3
Если вы хотите вставить свою дату в базу данных, я бы сначала сделал то, что предложил Даниэль:
XMLGregorianCalendar xgc=<assume this is initialized>;
Date timestamp=xgc.toGregorianCalendar().getTime();
а затем вставьте его через PreparedStatement как временную метку в миллисекундах (время Epoch). Таким образом, вы не потеряете точность.
preparedStatement.setTimestamp(colNum,new Timestamp(timestamp.getTime()));
Ответ 4
TL;DR
myPreparedStatement.setObject(
… ,
myXGC.toGregorianCalendar()
.toZonedDateTime()
) ;
java.time
В современном подходе используются классы java.time, которые вытеснили неприятные старые классы Date
, Calendar
и GregorianCalendar
.
Преобразование из старых классов в java.time.
GregorianCalendar gc = myXGC.toGregorianCalendar() ;
ZonedDateTime zdt = gc.toZonedDateTime();
Передайте значения даты и времени в вашу базу данных как объекты даты, а не как строки.
Если ваш JDBC-драйвер соответствует JDBC 4.2 и более поздним версиям, вы можете напрямую обращаться к типам java.time.
myPreparedStatement.setObject( … , zdt ) ;
Если ваш драйвер еще не совместим, коротко преобразите его в тип java.sql.
myPreparedStatement.setTimestamp( … , java.sql.Timestamp.from ( zdt.toInstant() ) ) ;
Ответ 5
Использовать класс DateFormat в Java. Это должно быть полезно: http://docs.oracle.com/javase/6/docs/api/java/text/DateFormat.html
Ответ 6
Вы можете преобразовать XMLGregorianCalendar в java.util.Date Object, используя эти две строки кода: -
Date date = xmlDate.toGregorianCalendar().getTime();
System.out.println("java.util.date :- " + date);
Для преобразования в объект java.slq.Date используйте этот код: -
long time = xmlDate.toGregorianCalendar().getTime().getTime();
java.sql.Date sqlDate = new java.sql.Date(time);
Вы можете увидеть полный пример здесь
Ответ 7
Пожалуйста, используйте следующую функцию: просто передайте желаемый экземпляр и формат даты XMLGregorianCalendar (пример формата: "DD MMMM yyyy" → 01 января 2017 г.)
public String parseDate(String format,XMLGregorianCalendar XMLdate){
Date date = XMLdate.toGregorianCalendar().getTime();
DateFormat formatter = new SimpleDateFormat(format);
String formattedDate = formatter.format(date);
return formattedDate;
}
Ответ 8
Это возвращает java.util.Date:
java.util.Date tempDate = issueDate.toGregorianCalendar().getTime();