如何在 GMT(格林威治)时间将 XMLGregorianCalendar 转换为 java.util.Date
Posted
技术标签:
【中文标题】如何在 GMT(格林威治)时间将 XMLGregorianCalendar 转换为 java.util.Date【英文标题】:how to convert XMLGregorian Calendar to java.util.Date in GMT(Greenwich) time 【发布时间】:2018-01-23 01:38:45 【问题描述】:我正在尝试将 XMLGregorian Calendar 转换为 GMT 中的 java.util.Date。但以下方法给了我相同的日期。它无法转换日期。你能看看下面的代码,告诉我哪里做错了吗?
try
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:MM");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("UTC"));
return dateFormatGmt.parse(dateFormatGmt.format(date));
catch (ParseException e)
e.printStackTrace();
return null;
【问题讨论】:
您可以通过xmlGregorianCalendar.toGregorianCalendar().getTime()
获得java.util.Date
。你不需要格式化和解析因为date doesn't have a timezone,所以不需要将它转换为UTC。 Date
仅具有自 1970-01-01T00:00Z
以来的毫秒数,并且没有时区或任何格式(您也可以认为它是“始终采用 UTC”)。
【参考方案1】:
java.time
避免麻烦的旧日期时间类,现在被 java.time 类取代。
将您的XMLGregorianCalendar
对象转换为java.util.GregorianCalendar
。从那里到java.time.ZonedDateTime
。从那里到java.time.Instant
,它始终是UTC(基本上是新的GMT)。
GregorianCalendar gc = myXgc.toGregorianCalendar() ;
ZonedDateTime zdt = gc.toZonedDateTime() ;
Instant instant = zdt.toInstant() ;
如果您绝对必须拥有java.util.Date
,请使用添加到旧类的新方法进行转换。
java.util.Date d = Date.from( instant ) ;
搜索堆栈溢出以获取更多信息。您的问题确实与许多其他问题重复。
【讨论】:
亲爱的投票者,请在投票的同时留下评论。以上是关于如何在 GMT(格林威治)时间将 XMLGregorianCalendar 转换为 java.util.Date的主要内容,如果未能解决你的问题,请参考以下文章