轴客户端存根日历错误日期

axis client stub Calendar wrong date

我有一个奇怪的问题。

我使用 eclipse 使用 wsdl 生成存根。

生成的存根接受一个 java 对象作为参数,我需要在其中设置日历。

我有一个格式为 "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);

如果我打印肥皂 xml 请求,我注意到日期是:

<ArrivalDate>2015-02-02T23:00:00.244Z</ArrivalDate>

所以在我提供的日期前一小时。

我该如何解决这个奇怪的问题?

谢谢!

Calendar calendar = Calendar.getInstance();

这将使用主机的默认时区生成一个日历对象。

<ArrivalDate>2015-02-02T23:00:00.244Z</ArrivalDate>

这个时间是 UTC(最后的 "Z" 表示 "Zulu",又名 UTC)。

您已经指出计算机正在使用巴黎时区,即 one hour ahead of UTC。换句话说,巴黎时间是 2 月 3 日午夜,UTC 时间是 2 月 2 日 23:00。

您可以初始化日历以改为使用 UTC:

TimeZone tzUTC = TimeZone.getTimeZone("UTC");
Calendar calendar = Calendar.getInstance(tzUTC);