从日历日期设置 XMLGregorianCalendar 值的最佳方法是什么?
posting.setXMLGregorianCalendar(message.getCreateDate());
这是我的课:
Message.java
private Calendar createDate;
public Calendar getCreateDate() {
return createDate;
}
从日历日期设置 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
,即一个日期、一个时间和一个指定的时区。请注意时区问题。如果您未能显式处理时区,则会隐式分配 JVM 当前的默认时区。GregorianCalendar
Calendar
以、或等格式指定适当的时区名称。永远不要使用 2-4 个字母的缩写,例如或因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。Continent/Region
America/Edmonton
Africa/Tunis
Europe/Moscow
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的旧代码交互,请在旧类和现代类之间进行转换。查看添加到旧类的新方法。
ZonedDateTime
可以通过调用将对象转换为GregorianCalendar
对象(的子类) 。Calendar
GregorianCalendar.from( ZonedDateTime )
GregorianCalendar gregCal = GregorianCalendar.from( zdt ) ;
AGregorianCalendar
可以转换为 a XMLGregorianCalendar
,但我们必须多做一步。该类XMLGregorianCalendar
本身缺少来自GregorianCalendar
. 帮助类可以完成工作DatatypeFactory
,如java.time 的发明者 Stephen Colebourne “JodaStephen”</a> 的回答中所示。
XMLGregorianCalendar xmlGregCal = DatatypeFactory.newInstance().newXMLGregorianCalendar( gregCal );
不是我推荐它,但你可以将它组合成一个单行,如顶部的tl;dr部分所示。