Укажите формат даты в XMLGregorianCalendar
Я хочу использовать формат даты в XMLGregorianCalendar
для отправки в веб-службу. Веб-служба ожидает информацию в формате yyyy-dd-mm
. Я использую приведенный ниже код для создания XMLGregorianCalendar
и отправки его в веб-службу.
Date dob = null;
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
try {
XMLGregorianCalendar date2;
dob = df.parse("13/06/1983");
GregorianCalendar c = new GregorianCalendar();
c.setTimeInMillis(dob.getTime());
date2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
System.out.println(date2);
}
catch(DatatypeConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch(ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
К сожалению, я всегда получаю дату как 1983-06-13T00:00:00.000-04:00
. Время также включается в выход. Можно ли получить только дату? Не могли бы вы помочь мне?
Ответы
Ответ 1
вам не нужно указывать "SimpleDateFormat", это просто:
Вы должны указать константу "DatatypeConstants.FIELD_UNDEFINED", где вы не хотите показывать
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(new Date());
XMLGregorianCalendar xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendarDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)+1, cal.get(Calendar.DAY_OF_MONTH), DatatypeConstants.FIELD_UNDEFINED);
Ответ 2
Да, понял...
Date dob=null;
DateFormat df=new SimpleDateFormat("dd/MM/yyyy");
dob=df.parse( "13/06/1983" );
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(dob);
XMLGregorianCalendar xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendarDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)+1, cal.get(Calendar.DAY_OF_MONTH), DatatypeConstants.FIELD_UNDEFINED);
Это даст ему правильный формат.
Ответ 3
Гораздо проще использовать только SimpleDateFormat, не передавая все параметры индивидуально:
String FORMATER = "yyyy-MM-dd'T'HH:mm:ss'Z'";
DateFormat format = new SimpleDateFormat(FORMATER);
Date date = new Date();
XMLGregorianCalendar gDateFormatted =
DatatypeFactory.newInstance().newXMLGregorianCalendar(format.format(date));
Полный пример здесь.
Примечание.. Это работает только для удаления последних двух полей: миллисекунд и часовой пояс или для удаления всего компонента времени с помощью форматирования yyyy-MM-dd
.
Ответ 4
Это простой способ для любого формата. Просто измените его на требуемую строку формата
XMLGregorianCalendar gregFmt = DatatypeFactory.newInstance().newXMLGregorianCalendar(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(new Date()));
System.out.println(gregFmt);