gpt4 book ai didi

java - XMLGregoriancalendar 中的时区错误

转载 作者:行者123 更新时间:2023-12-01 12:54:22 30 4
gpt4 key购买 nike

我使用下面的代码在 Web 服务中设置 XMLGregorianCalendar 字段

SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
Date dateOfBirth = null;
try {
dateOfBirth = format.parse(adult.getDob_day() + "-" + adult.getDob_month() + "-"
+ adult.getDob_year() + " 00:00:00");
} catch (Exception e) {
log.error("Error while parsing dateOfBirth. Cause " + e.getMessage());
e.printStackTrace();
}
passenger.setDateOfBirthField(convertToXMLCalendar(dateOfBirth));

convertToXMLCalendar方法如下

private XMLGregorianCalendar convertToXMLCalendar(Date date) {

XMLGregorianCalendar xmlCalendar = null;
GregorianCalendar calendar = new GregorianCalendar();

if (date != null) {
try {
calendar.setTime(date);
xmlCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar);
} catch (Exception e) {
log.error("Error while converting to XMLGregorianCalendar. Cause " + e.getMessage());
// e.printStackTrace();
}
}
return xmlCalendar;
}

我的服务器位置时区是+03:00。但在少数随机情况下,时区会在 SOAP 请求中以 +04:00 的形式发送。

<ns7:dateOfBirthField>1955-08-27T00:00:00.000+04:00</ns7:dateOfBirthField>

因此,服务收到的日期比实际日期少一天。如果我发送 03-06-2014 00:00:00 它会在 02-06-2014 11:00:00 到达服务。

如果我将时间设置为 12:00:00 而不是 00:00:00 将解决该问题。但是这个时区变化的原因是什么?

最佳答案

您的 SimpleDateFormat 未指定时区,因此它使用您的本地时区。我建议:

  • 根本不解析值。您已经获得了单独的日、月和年 - 因此可以直接将其与日历一起使用!
  • Calendar 传递给 convertToXMLCalendar 而不是 date...如果您需要的话(见下文)
  • 如果您确实想要,请将日历的时区指定为 UTC...尽管从根本上来说,我希望 dateOfBirth只是一个日期,说实话,例如1955-08-27。这样您就根本不需要指定时区。

事实上,鉴于您已经获得了年/月/日,我只需直接根据这些值创建一个 XMLGregorianCalendar:

XMLGregorianCalendar calendar = DatatypeFactory.newInstance()
.newXMLGregorianCalendar(adult.getDob_year(),
adult.getDob_month(),
adult.getDob_day(),
DatatypeConstants.FIELD_UNDEFINED); // No time zone

那么您代表的是日期而不是dateTime,这才是适合您的数据的。

关于java - XMLGregoriancalendar 中的时区错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24009403/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com