我从文件中读到了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;
}当我保存它们而不是获取第一、第二和第三个小时时,我得到:

我在这里读到了很多类似问题的答案,但我仍然不能答对,因为我得到了奇怪的结果,比如第一个,第三个,第三个小时等等。我应该在我的转换器中进行哪些更改才能使其正常工作?
发布于 2018-09-01 01:25:52
好的,我通过添加
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));在我从toDate方法返回java.util.Date之前。
https://stackoverflow.com/questions/52075177
复制相似问题