如何将XMLGregorianCalendar日期保存到DB

时间:2018-10-29 09:18:51

标签: java date xmlgregoriancalendar

我有SOAP服务,该服务可以接收日期-Date Data Type description this type

enter image description here

我也有从XSD生成的JAXB类,并且在该类日期中,像XMLGregorianCalendar一样出现:

@XmlAttribute(name = "billDate", required = true)
@XmlSchemaType(name = "date")
protected XMLGregorianCalendar billDate;

现在我需要将此日期存储在数据库中。在Oracle DB中,我具有类型为DATE的列。在PostgreSQl-TIMESTAMP中输入。在实体中:

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "BILL_DATE")
private Date billDate;

我的问题:

如果您相信该文档(并且您可以相信我检查的话),那么我可以使用以下格式发送日期:2002-09-242002-09-24Z2002-09-24+06:00。没有时区和时区。现在,我需要将此日期保存到数据库中,然后,需要以正确的格式(带时区或不带时区)从数据库中还原它。当我将其保存到数据库时,我使用以下转换方法:

public static java.util.Date asDate(XMLGregorianCalendar xgc) {
        if (xgc == null) {
            return null;
        } else {
            return xgc.toGregorianCalendar().getTime();
        }
    }

然后保存java.util.Date。但是当我选择这个日期并转换为 XMLGregorianCalendar-我知道时区:

private static DatatypeFactory df = null;

    static {
        try {
            df = DatatypeFactory.newInstance();
        } catch (DatatypeConfigurationException dce) {
            throw new IllegalStateException("Exception while obtaining DatatypeFactory instance", dce);
        }
    }


    public static XMLGregorianCalendar asXMLGregorianCalendar(java.util.Date date) {
        if (date == null) {
            return null;
        } else {
            GregorianCalendar gc = new GregorianCalendar();
            gc.setTimeInMillis(date.getTime());
            return df.newXMLGregorianCalendar(gc);
        }
    }

因此,当我得到日期时:2002-09-24将其保存到数据库,从数据库中选择并转换为XMLGregorianCalendar-我有2002-09-24+03:00,但是我需要2002-09-24。如果我有日期2002-09-24+03:00,我就需要2002-09-24+03:00

0 个答案:

没有答案