java - 将 XMLgregorianCalender 默认格式更改为 "yyyyMMdd"

标签 java jaxb gregorian-calendar xmlgregoriancalendar

需要助手,我需要将 XMLGregorianCalendar 的默认格式 (2017-01-18) 更改为“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;
    }
}

最佳答案

恐怕你做不到。如果你看一下类(class) 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% 确定如何处理它。通过方法声明将其抛出,以便该方法的调用者意识到潜在的失败。

关于java - 将 XMLgregorianCalender 默认格式更改为 "yyyyMMdd",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41714925/

相关文章:

java - 如何避免 System.out 从回调中关闭

java - 无法将 xml 转换为 java 对象

java - 在 Web 方法中使用 JAXB 忽略 JodaTime 方法参数

java - 使用模式解析包含 GregorianCalendar 的字符串到日期

java - 从 Java 桌面编程到 Android 应用程序开发

java - 使用模板创建 PDF 文件

java - Cron 表达式在给定时间(小时和分钟)执行 cron 触发器

java - 在 Java 性能方面处理 API 的最佳方法。 (单独的线程与单个更新线程)

c# - 如何从 DateTime 获取 AM/PM 值?

android - Android 的日期类中的年份不正确