繁体   English   中英

Oracle中迄今为止的XMLGregorianCalendar

[英]XMLGregorianCalendar to Date in oracle

我从文件中读取了XMLGregorianCalendar日期:

<Status status="1028" timestamp="2018-03-25T01:00:00Z"/>
<Status status="1028" timestamp="2018-03-25T02:00:00Z"/>
<Status status="1028" timestamp="2018-03-25T03:00:00Z"/>

我需要将它们完全同时存储在oracle数据库中。 我得到了这个领域:

<column name="TIMESTAMP" type="DATE"/>

我在我的实体中得到了田野:

@Convert(converter = XMLGregorianCalendarConverter.class)
private XMLGregorianCalendar timestamp;

和我的转换器:

@Converter
@Slf4j
public class XMLGregorianCalendarConverter implements AttributeConverter<XMLGregorianCalendar, Date> {

    @Override
    public Date convertToDatabaseColumn(XMLGregorianCalendar xcal) {
        return toDate(xcal);
    }

@Override
public XMLGregorianCalendar convertToEntityAttribute(Date date) {
    try {
        return toXMLGregorianCalendarWithUTCTimezone(date);
    } catch (DatatypeConfigurationException e) {
        e.printStackTrace();
    }

    return null;
}

private DatatypeFactory getDatatypeFactory() throws DatatypeConfigurationException {
    return DatatypeFactory.newInstance();
}

private Date toDate(XMLGregorianCalendar calendar) {
    if (calendar == null) {
        return null;
    }

    return calendar.toGregorianCalendar().getTime();
}

private XMLGregorianCalendar toXMLGregorianCalendarWithUTCTimezone(Date date) throws DatatypeConfigurationException {

    if (date == null) {
        return null;
    }

    GregorianCalendar gregorianCalendar = new GregorianCalendar();
    gregorianCalendar.setTime(date);

    XMLGregorianCalendar xmlGregorianCalendar = getDatatypeFactory().newXMLGregorianCalendar(gregorianCalendar);
    xmlGregorianCalendar.setMillisecond(DatatypeConstants.FIELD_UNDEFINED);
    xmlGregorianCalendar.setTimezone(DatatypeConstants.EQUAL);
    return xmlGregorianCalendar;
}

当我保存它们而不是得到第一,第二和第三小时时,我得到:

我在这里读到了很多类似问题的答案,但是我仍然无法解决问题,因为我得到了奇怪的结果,例如第一,第三,第三小时等等。

好的,我通过添加解决了

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

在从toDate方法返回java.util.Date之前。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM