【发布时间】:2020-08-21 03:08:35
【问题描述】:
public static XMLGregorianCalendar getXMLEventTime(ZonedDateTime zonedDateTime) {
XMLGregorianCalendar xmlGregorianCalendar = null;
if(zonedDateTime!=null) {
GregorianCalendar gregorianCalendar = new GregorianCalendar();
gregorianCalendar.setTime(getDateFromZonedDateTime(zonedDateTime));
xmlGregorianCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(gregorianCalendar);
}
return xmlGregorianCalendar;
}
我想以“2020-05-06T16:58:38.517+00:00”格式输出,但在 UTC 中将这个“2020-05-06T16:58:38.517Z”作为我的服务器。
当我在本地(IST 时区)运行应用程序时,我得到了正确的输出“2020-05-06T16:58:38.517+05:30”,但在 UTC 时区也无法正常工作
【问题讨论】:
-
为什么?
XMLGregorianCalendar专门用于处理 XML 日期/时间值,XML Schema Data Types 文档特别允许Z。实际上,canonical 格式是Z,而不是+00:00,所以XMLGregorianCalendar正确使用了canonical 格式。它正在做它应该做的事情。 -
我检查了源代码。没有办法让
XMLGregorianCalendar不使用Z作为零偏移量。如果你想要+00:00,你可以使用OffsetDateTime和自定义DateTimeFormatter。 -
我想挑战你的头衔。是什么让您认为您需要特定格式的
XMLGregorianCalendar?XMLGregorianCalendar没有格式,但在您调用toString()时以 XML 格式打印。如果是针对 API,那么 API 的提供者应该知道这一点,并且应该接受您传递给 API 的XMLGregorianCalendar对象,而不用担心“格式”。如果是出于任何其他目的,则适用相同的考虑或@Andreas 的建议:使用OffsetDateTime和自定义DateTimeFormatter。 -
顺便说一句,简单一点:
GregorianCalendar gregorianCalendar = GregorianCalendar.from(zonedDateTime);
标签: java spring-boot datetime zoneddatetime xmlgregoriancalendar