首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >甲骨文中的XMLGregorianCalendar至今

甲骨文中的XMLGregorianCalendar至今
EN

Stack Overflow用户
提问于 2018-08-29 18:25:36
回答 1查看 467关注 0票数 1

我从文件中读到了XMLGregorianCalendar的日期:

代码语言:javascript
复制
<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数据库中。我得到了这个字段:

代码语言:javascript
复制
<column name="TIMESTAMP" type="DATE"/>

我的实体中有字段:

代码语言:javascript
复制
@Convert(converter = XMLGregorianCalendarConverter.class)
private XMLGregorianCalendar timestamp;

和我的转换器:

代码语言:javascript
复制
@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;
}

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

我在这里读到了很多类似问题的答案,但我仍然不能答对,因为我得到了奇怪的结果,比如第一个,第三个,第三个小时等等。我应该在我的转换器中进行哪些更改才能使其正常工作?

EN

回答 1

Stack Overflow用户

发布于 2018-09-01 01:25:52

好的,我通过添加

代码语言:javascript
复制
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

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

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

https://stackoverflow.com/questions/52075177

复制
相关文章

相似问题

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