Изменение формата XMLgregorianCalender по умолчанию на "yyyyMMdd"
Нужен помощник, мне нужно изменить формат по умолчанию (2017-01-18) для XMLGregorianCalendar
к примеру "20170118", я пробовал много примеров здесь, но это не помогает
private static SimpleDateFormat formats = new SimpleDateFormat("yyyyMMdd");
public static XMLGregorianCalendar unmarshal(String value) {
try {
return toXMLGregorianCalendar(formats.parse(value));
} catch ( ParseException e ) {
e.printStackTrace();
return null;
}
}
1 ответ
Боюсь, ты не сможешь этого сделать. Если вы посмотрите в класс XMLGregorianCalendar
вы обнаружите, что toString()
метод просто вызвать toXMLFormat()
и toXMLFormat()
не предоставляет возможности для настройки формата.
public String toXMLFormat() { QName typekind = getXMLSchemaType(); String formatString = null; // Fix 4971612: invalid SCCS macro substitution in data string // no %{alpha}% to avoid SCCS macro substitution if (typekind == DatatypeConstants.DATETIME) { formatString = "%Y-%M-%DT%h:%m:%s" + "%z"; } else if (typekind == DatatypeConstants.DATE) { formatString = "%Y-%M-%D" + "%z"; } else if (typekind == DatatypeConstants.TIME) { formatString = "%h:%m:%s" + "%z"; } else if (typekind == DatatypeConstants.GMONTH) { formatString = "--%M" + "%z"; } else if (typekind == DatatypeConstants.GDAY) { formatString = "---%D" + "%z"; } else if (typekind == DatatypeConstants.GYEAR) { formatString = "%Y" + "%z"; } else if (typekind == DatatypeConstants.GYEARMONTH) { formatString = "%Y-%M" + "%z"; } else if (typekind == DatatypeConstants.GMONTHDAY) { formatString = "--%M-%D" + "%z"; } return format(formatString); }
Есть ли обходное решение?
Ну, если вы просто хотите получить строку типа yyyyMMdd
из XMLGregorianCalendar
объект, вы можете сделать:
XMLGregorianCalendar c = YourCalendarHelper.unmarshal("2017-01-18");
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
String str = format.format(c.toGregorianCalendar().getTime());
System.out.println(str); // 20170118
Кстати, если исключение возникло во время конвертации, НЕ перехватывайте его, если вы не уверены, что справитесь на 100%. Бросьте его через объявление метода, чтобы вызывающий этот метод знал о потенциальной ошибке.