在“getTime”方法中,真正转换到本地时区的是您自己的代码。正如您在调试中看到的那样,您的“xmlGregorianCalendar”仍然具有客户端发送的原始时间和时区(至少如果 Web 服务参数类型是“XmlGregorianCalendar”,就好像它是“Date”一样,转换确实会发生在代码后面的服务层)。
我遇到过同样的问题,即使我在这里试图帮助你,我还没有找到一个很好的解决方案。但我找到了一个:
import java.util.Calendar;
import java.util.Date;
import javax.xml.datatype.XMLGregorianCalendar;
...
public Date webserviceDateToJavaDateKeepingOriginalTime(XMLGregorianCalendar webserviceDate) {
Calendar calendar = Calendar.getInstance();
calendar.set(
webserviceDate.getYear(),
webserviceDate.getMonth(),
webserviceDate.getDay(),
webserviceDate.getHour(),
webserviceDate.getMinute(),
webserviceDate.getSecond());
return calendar.getTime();
}
到现在为止,它解决了我的问题,保持了客户的时间。我相信将来我会被迫做一些事情,比如在数据库中存储客户端时区以及它的日期和时间,所以我将能够在 UI 中显示原始时间或转换后的时间(到本地时间)一个,这将取决于场景。
我建议你阅读这篇文章。