如何将java.time.ZonedDateTime转换为XMLGregorianCalendar?

20

有没有一种简单的方法将java.time.ZonedDateTime转换为XMLGregorianCalendar?

也许我需要一些中间步骤,比如将ZonedDateTime转换为java.util.Date,但这会使代码变得很混乱。

这个问题出现在JAX-WS web服务中,那里的日期时间被传递为XMLGregorianCalendar。


展示一些代码,说明你是如何做到的。我曾经遇到过这个问题,需要将XMLGregorianCalendar转换为没有时区的普通日期,只需使用简单的yyyy-MM-dd日期格式即可。由于Java JAX-WS将日期映射到XMLGregorianCalendar而不是Date,即使您在WSDL数据类型中定义了它。 - Omoro
1个回答

41

目前我认为这是最直接的方法:

ZonedDateTime now = ZonedDateTime.now();
GregorianCalendar gregorianCalendar = GregorianCalendar.from(now); 
XMLGregorianCalendar xmlGregorianCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(gregorianCalendar);

1
给其他读者提醒:请注意所涉及的时区。当从 ZonedDateTime.now 中省略可选的 ZoneId 参数时,JVM 会隐式地分配当前默认的时区。我建议始终明确指定您期望的时区。例如:ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )。这里的其余答案是完全正确的。 - Basil Bourque

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接