![](/img/trans.png)
[英]Date change when converting from XMLGregorianCalendar to Calendar
[英]Set XMLGregorianCalendar value from a Calendar date in Java
从日历日期设置XMLGregorianCalendar值的最佳方法是什么?
posting.setXMLGregorianCalendar(message.getCreateDate());
这是我的课:
Message.java
private Calendar createDate;
public Calendar getCreateDate() {
return createDate;
}
您可以尝试以下方法:
Calendar createDate = Calendar.getInstance();
Date cDate = createDate.getTime();
GregorianCalendar c = new GregorianCalendar();
c.setTime(cDate);
XMLGregorianCalendar date2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
DatatypeFactory.newInstance().newXMLGregorianCalendar(
GregorianCalendar.from(
ZonedDateTime.now(
ZoneId.of( "Pacific/Auckland" )
)
)
)
XMLGregorianCalendar
, GregorianCalendar
和Calendar
类均表示时刻,即日期,一天中的时间和指定的时区。 时刻注意时区问题。 如果您无法明确寻址区域,则将隐式分配JVM的当前默认时区。
以Continent/Region
的格式指定正确的时区名称 ,例如America/Edmonton
, Africa/Tunis
或Europe/Moscow
。 切勿使用2-4字母的缩写,例如EST
或IST
因为它们不是真实的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
如果要使用JVM的当前默认时区,请提出要求并作为参数传递。 如果省略,代码将变得难以理解,因为我们不确定您是否打算使用默认值,或者您是否像许多程序员一样不知道该问题。
ZoneId z = ZoneId.systemDefault() ; // Get JVM’s current default time zone.
这些…Calendar
类也很糟糕 。 Sun,Oracle和JCP社区几年前通过采用JSR 310放弃了它们……您也应该这样做。 仅将java.time类用于您的业务逻辑。
ZoneId z = ZoneId.of( "Africa/Casablanca" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ; // Capture the current moment as seen through the wall-clock time used by the people of a particular region (a time zone).
如果与尚未更新为java.time的旧代码进行交互 ,请在旧类和现代类之间进行转换。 查看添加到旧类中的新方法。
通过调用GregorianCalendar.from( ZonedDateTime )
可以将ZonedDateTime
对象转换为GregorianCalendar
对象( Calendar
的子类GregorianCalendar.from( ZonedDateTime )
。
GregorianCalendar gregCal = GregorianCalendar.from( zdt ) ;
可以将GregorianCalendar
转换为XMLGregorianCalendar
,但是我们必须XMLGregorianCalendar
一步。 XMLGregorianCalendar
类本身缺少GregorianCalendar
的转换方法。 一个辅助类可以把工作做好, DatatypeFactory
,如在此答案由斯蒂芬Colebourne对“JodaStephen” ,java.time的发明者。
XMLGregorianCalendar xmlGregCal = DatatypeFactory.newInstance().newXMLGregorianCalendar( gregCal );
并非我建议这样做,但是您可以将其组合为单线,如顶部tl; dr部分所示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.