我有一个代码段,可以将Date
转换为XMLGregorianCalendar
,但在看到结果日期不同之后。不确定为什么在转换后更改日期。
代码:
public void getDate() throws ParseException {
Date current = null;
String str = "1980-10-26";
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date current1 = format.parse(str);
XMLGregorianCalendar xmlCalendar = null;
xmlCalendar = Utility.convertDateToXMLGreCal(current1);
System.out.println("xmlCalendar: "+xmlCalendar);
current = Utility.convertXMLGreClndrToDate(xmlCalendar);
System.out.println("current1: "+current.toString());
}
public static XMLGregorianCalendar convertDateToXMLGreCal(final Date date){
TimeZone zone = TimeZone.getTimeZone("UTC");
GregorianCalendar gregoClndr = new GregorianCalendar(zone);
gregoClndr.setTime(date);
XMLGregorianCalendar xmlGreClndr = null;
try {
final DatatypeFactory dataTypeFactory = DatatypeFactory.newInstance();
xmlGreClndr = dataTypeFactory.newXMLGregorianCalendar(gregoClndr);
} catch (DatatypeConfigurationException e) {
}
return xmlGreClndr;
}
*
结果:
xmlCalendar: 1980-10-25T18:30:00.000Z current1: Sun Oct 26 00:00:00 IST 1980
我希望xmlCalendar
为1980-10-26T00:00:00.000Z
。
有人能告诉我怎么做吗?
答案 0 :(得分:1)
问题是您没有在DateFormat
中指定时区 - 因此正在使用系统默认时区。结果是您当地时区(IST)的午夜,但在XMLGregorianCalendar
中,它以UTC格式呈现。
解决此问题的最简单方法是将UTC指定为DateFormat
中的时区:
format.setTimeZone(TimeZone.getTimeZone("UTC"));
这样,每个日期将在“UTC日”开始时解析为午夜,听起来就像是你所期待的。