首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java -序列化/反序列化日期时出错

Java -序列化/反序列化日期时出错
EN

Stack Overflow用户
提问于 2019-02-28 20:54:05
回答 2查看 458关注 0票数 0

我弄不清楚这个日期格式是什么:2019-02-28T12:17:46.279+0000。我尝试了不同的日期格式来获得这个结果,但都不起作用。最接近的模式是:yyyy-MM-dd'T'HH:mm:ss.SSSZ,但是对于这个模式,输出是这样的:2019-02-28T12:17:46.279-0000 (-在秒之后,而不是+)

我得到了这个例外:

代码语言:javascript
复制
Caused by: java.lang.IllegalArgumentException: 2019-02-28T12:17:46.279+0000
    at org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl$Parser.skip(XMLGregorianCalendarImpl.java:2932)
    at org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl$Parser.parse(XMLGregorianCalendarImpl.java:2898)
    at org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl.<init>(XMLGregorianCalendarImpl.java:478)
    at org.apache.xerces.jaxp.datatype.DatatypeFactoryImpl.newXMLGregorianCalendar(DatatypeFactoryImpl.java:230)
    at __redirected.__DatatypeFactory.newXMLGregorianCalendar(__DatatypeFactory.java:132)
    at javax.xml.bind.DatatypeConverterImpl.parseDate(DatatypeConverterImpl.java:519)
    at javax.xml.bind.DatatypeConverter.parseDate(DatatypeConverter.java:431)
    at eu.europa.ec.my.custom.package.model.mapper.XsdDateTimeConverter.unmarshal(XsdDateTimeConverter.java:23)

我的XsdDateTimeConverter类如下所示:

代码语言:javascript
复制
public class XsdDateTimeConverter {

    public static Date unmarshal(String dateTime) {
        return DatatypeConverter.parseDate(dateTime).getTime();
    }

    public static String marshalDate(Date date) {
        final Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return DatatypeConverter.printDate(calendar);
    }

    public static String marshalDateTime(Date dateTime) {
        final Calendar calendar = Calendar.getInstance();
        calendar.setTime(dateTime);
        return DatatypeConverter.printDateTime(calendar);
    }
}

我的postgres数据库中的解析日期如下所示:

代码语言:javascript
复制
move_timestamp timestamp(6) with time zone

2019-02-28 12:17:46.279+00

在我的rest方法中,我像这样使用ObjectMapper

代码语言:javascript
复制
MyCustomResponseDto responseDto = customService.getCustomResponseDto(query);
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
String strValue = mapper.writeValueAsString(responseDto);
return Response.ok(strValue).build();

我想我真正想要的是这个日期的正确模式。我可以进入这个页面:http://www.sdfonlinetester.info/并输入我的模式(例如yyyy-MM-dd'T'HH:mm:ss.SSSZ),它会给出该模式的实际日期输出。我需要另一条路。我想输入我的日期,它将为我提供正确的模式。

EN

回答 2

Stack Overflow用户

发布于 2019-02-28 21:25:45

你可以试试下面的代码

新日期格式=新日期);String SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ",_ new =format.format(新日期());

票数 0
EN

Stack Overflow用户

发布于 2019-02-28 22:32:20

省去了一大堆麻烦,节省了米利斯的时代。仅在UI中解析和呈现日期。很少有人类的日程安排需要计算机知道小时、日、周、月、年……但是在时间上保存一个瞬间只是一个“长”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54926253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档