2 回答
TA贡献1818条经验 获得超8个赞
你可以试试这个:
Calendar createDate = Calendar.getInstance();
Date cDate = createDate.getTime();
GregorianCalendar c = new GregorianCalendar();
c.setTime(cDate);
XMLGregorianCalendar date2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
TA贡献1784条经验 获得超9个赞
博士
DatatypeFactory.newInstance().newXMLGregorianCalendar(
GregorianCalendar.from(
ZonedDateTime.now(
ZoneId.of( "Pacific/Auckland" )
)
)
)
一个时刻需要一个时区
XML 公历日历
类、公历日历类
和日历
类都表示一个时刻,即日期、一天中的时间和分配的时区。注意时区问题。如果无法显式解决区域问题,那么将隐式分配 JVM 的当前缺省时区。
以 的格式指定正确的时区名称,如 、 或 。切勿使用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.
时间
这些课程也很糟糕。Sun、甲骨文和 JCP 社区多年前就放弃了它们,采用了 JSR 310...你也应该这样做。仅将 java.time 类用于业务逻辑。…Calendar
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 gregCal = GregorianCalendar.from( zdt ) ;
A 可以转换为 a ,但我们必须多做一个步骤。该类本身缺少 来自 的转换器方法。一个帮助器类可以完成工作,数据类型工厂
,如斯蒂芬·科尔伯恩的这个答案所示,“JodaStephen”,java.time的发明者。GregorianCalendar
XMLGregorianCalendar
XMLGregorianCalendar
GregorianCalendar
XMLGregorianCalendar xmlGregCal = DatatypeFactory.newInstance().newXMLGregorianCalendar( gregCal );
不是我推荐它,但你可以把它组合成一个单行,如顶部的tl;dr部分所示。
添加回答
举报