我尝试获取一个 XMLGregorienCalender 条目,它看起来像
"06-09-2022 17:05:28:113319"
我调用 extern api 来获取如下样式的时间戳。但我需要它来调用另一个 api。 对于数据结构,我使用了许多 wsdl。所以我实现了一个 Dateadapter 它将时间戳转换为类似
2022-09-06T17:07:21.319+02:00
的东西。但没成功
我正在使用 Java - Springboot。
数据适配器:
public class DateAdapter extends XmlAdapter<String, XMLGregorianCalendar> {
private static final String DATE_STRING = "dd-MM-yyyy HH:mm:ss:SSSSSSSX";
@Override
public String marshal(XMLGregorianCalendar v) throws Exception {
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_STRING);
return dateFormat.format(v.toGregorianCalendar().getTime());
}
@Override
public XMLGregorianCalendar unmarshal(String v) throws Exception {
GregorianCalendar gregorianCalendar = new GregorianCalendar();
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_STRING);
gregorianCalendar.setTime(dateFormat.parse(v));
return DatatypeFactory.newInstance().newXMLGregorianCalendar(gregorianCalendar);
}
}
您正在使用可怕的日期时间类,这些类在几年前已被 JSR 310 中定义的现代 java.time 类取代。
如果传递一个
XMLGregorianCalendar
对象,请立即通过遗留类 ZonedDateTime
转换为现代替代品 GregorianCalendar
。
ZonedDateTime zdt = myXMLGregorianCalendar.toGregorianCalendar().toZonedDateTime() ;
要生成标准 ISO 8601 格式的文本,并明智地扩展以在方括号中附加时区名称,请调用
ZonedDateTime#toString
。
要严格生成标准 ISO 8601 格式的文本,请使用预定义的格式化程序,
DateTimeFormatter.ISO_OFFSET_DATE_TIME
。
String output = zdt.format( DateTimeFormatter.ISO_OFFSET_DATE_TIME ) ;