需要助手,我需要将 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/