0

从日历日期设置 XMLGregorianCalendar 值的最佳方法是什么?

    posting.setXMLGregorianCalendar(message.getCreateDate());

这是我的课:

Message.java

private Calendar createDate;
public Calendar getCreateDate() {
    return createDate;
}
4

2 回答 2

1

你可以试试这个:

Calendar createDate = Calendar.getInstance();
Date cDate = createDate.getTime();
GregorianCalendar c = new GregorianCalendar();
c.setTime(cDate);
XMLGregorianCalendar date2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
于 2019-04-01T12:34:39.080 回答
0

tl;博士

DatatypeFactory.newInstance().newXMLGregorianCalendar( 
    GregorianCalendar.from( 
        ZonedDateTime.now( 
            ZoneId.of( "Pacific/Auckland" ) 
        ) 
    )
)

片刻需要时区

、和类都代表一个时刻XMLGregorianCalendar,即一个日期、一个时间和一个指定的时区。请注意时区问题。如果您未能显式处理时区,则会隐式分配 JVM 当前的默认时区。GregorianCalendarCalendar

以、或等格式指定适当的时区名称。永远不要使用 2-4 个字母的缩写,例如或因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。Continent/RegionAmerica/EdmontonAfrica/TunisEurope/MoscowESTIST

ZoneId z = ZoneId.of( "America/Montreal" ) ;  

如果你想使用 JVM 的当前默认时区,请求它并作为参数传递。如果省略,代码会变得模棱两可,因为我们不确定您是否打算使用默认值,或者您是否像许多程序员一样没有意识到这个问题。

ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.

java.time

这些…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对象(的子类) 。CalendarGregorianCalendar.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部分所示。

在此处输入图像描述

于 2019-04-01T19:16:11.697 回答