XMLGregorianCalendar转换的日期给出了错误的结果

时间:2015-05-05 13:14:48

标签: java date gregorian-calendar date-conversion

我有一个代码段,可以将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

我希望xmlCalendar1980-10-26T00:00:00.000Z

有人能告诉我怎么做吗?

1 个答案:

答案 0 :(得分:1)

问题是您没有在DateFormat中指定时区 - 因此正在使用系统默认时区。结果是您当地时区(IST)的午夜,但在XMLGregorianCalendar中,它以UTC格式呈现。

解决此问题的最简单方法是将UTC指定为DateFormat中的时区:

format.setTimeZone(TimeZone.getTimeZone("UTC"));

这样,每个日期将在“UTC日”开始时解析为午夜,听起来就像是你所期待的。