如何在 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的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Go 中将时间戳格式化为 GMT?

如何将日期/时间从 GMT 转换为本地时区

如何在 Oracle 中获取当前的 GMT

Linux如何使用date命令查看当前的GMT时间?

UILocalNotification 调度与 10AM GMT 问题的重复

GMT与UTC简介(转)