Изменение формата 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%. Бросьте его через объявление метода, чтобы вызывающий этот метод знал о потенциальной ошибке.

Другие вопросы по тегам