XMLGregorianCalendar 6 毫秒

问题描述 投票:0回答:1

我尝试获取一个 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);
    }

}
java spring-boot date-format xmlgregoriancalendar
1个回答
0
投票

您正在使用可怕的日期时间类,这些类在几年前已被 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 ) ;
© www.soinside.com 2019 - 2024. All rights reserved.