将字符串解析为'yyyy-mm-ddThh:mm:ss.SSSZ'ISODate java

时间:2017-02-17 12:30:50

标签: java mongodb date simpledateformat isodate

如何使用 SimpleDateFormat 将String转换为 ISODate 格式,这意味着我希望最终以java.util.Date格式获取Date。

我的字符串看起来像 2017-02-17T09:28:03.000Z ,我想将其转换为日期格式。我可以用Joda日期格式执行此操作,但由于我使用的是mongoDB,因此它不接受joda格式。

   String startDateString1 =  "2017-02-17T04:23:17.452Z";      
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
    Date  startDate = df.parse(startDateString1);
    String newDateString = df.format(startDate);

上面的代码无效。

3 个答案:

答案 0 :(得分:2)

您可以在Java 8中执行此操作。

Instant instant = Instant.parse("2017-02-17T09:28:03.000Z");
Date date = Date.from(instant);

答案 1 :(得分:0)

您可以使用javax.xml.bind.DatatypeConverter.parseDateTime("2017-02-17T04:23:17.452Z")来返回Calendar对象。您可以在其上调用getTime()以获取Date对象。

答案 2 :(得分:0)

您的代码无效,因为Z是用于解释RFC-822时区的保留字符:

  

RFC 822时区:对于格式化,使用RFC 822 4位时区格式:

 RFC822TimeZone:
         Sign TwoDigitHours Minutes
 TwoDigitHours:
         Digit Digit

从Java 7开始,您可以使用X来解释ISO-8601时区https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html。以下作品:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");

但是,在我的电脑上,

System.out.println(newDateString);

产生以下输出:

  

2017-02-17T05:23:17.452 + 01

或者,如果您确定只有UTC日期,则可以使用简单的引号来转义Z字母:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");

以下是显示的结果:

  

2017-02-17T04:23:17.452Z