Конвертировать 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() ) ) ;

Ответ 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();