我有一个奇怪的问题。
使用eclipse我使用wsdl生成存根。
生成的stub接受一个java对象作为参数,我需要在其中设置一个Calendar。
我的日期格式为“yyyy-MM-dd”,例如:
"2015-02-03"
要设置日历以传递给我使用的存根:
String arrival[] = "2015-02-03".split("-");
Calendar calendar = Calendar.getInstance();
calendar.set(Integer.parseInt(arrival[0]), Integer.parseInt(arrival[1])-1, Integer.parseInt(arrival[2]),0,0,0);
调用存根:
StubBean bean = new StubBean(calendar,...);
stub.method(bean);
String xml_request = stub._getCall().getMessageContext().getRequestMessage().getSOAPPartAsString();
System.out.println(xml_request);
如果我打印soap xml请求,我会注意到日期是:
<ArrivalDate>2015-02-02T23:00:00.244Z</ArrivalDate>
所以在我提供的日期前一小时。
我该如何解决这个奇怪的问题?
谢谢!
答案 0 :(得分:2)
Calendar calendar = Calendar.getInstance();
这将使用主机的默认时区生成日历对象。
<ArrivalDate>2015-02-02T23:00:00.244Z</ArrivalDate>
这个时间是UTC(&#34; Z&#34;最后意味着&#34; Zulu&#34;,又名UTC)。
您已表示计算机正在使用巴黎的时区one hour ahead of UTC。换句话说,当它在2月3日午夜时分在巴黎,它是2月2日23:00,UTC。
您可以将日历初始化为使用UTC代替:
TimeZone tzUTC = TimeZone.getTimeZone("UTC");
Calendar calendar = Calendar.getInstance(tzUTC);