java isodate mongodb_关于mongodb:parse字符串为’yyyy-mm-ddThh:mm:ss.SSSZ’ISODate java

本问题已经有最佳答案,请猛点这里访问。

如何使用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);

上面的代码不起作用。

您的Java版本是什么?

您的时区是否总是Z? 如果没有,那还能是什么?

Java 8 java.time非常适合ISO日期和时间。 在我看来,Instant.parse()会毫无问题地吞噬您的字符串。 如果您的MongoDB驱动程序不接受Instant,则转换为Date很容易。

还重复解析ISO 8601日期格式,如Java中的2015-06-27T13:16:37.363Z。

我正在使用Java 7

您可以像下面这样在Java 8中进行操作。

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

Date date = Date.from(instant);

新的JDBC驱动程序应接受Instant,而不必将其转换为Date(不知道MongoDB是否存在这样的新驱动程序,也不知道asker是否有一个新驱动程序)。

我已经检查过了。 我认为MongoDB没有一个。

我正在使用JDK 1.7

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

RFC 822 time zone: For formatting, the RFC 822 4-digit time zone format is used:

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

您可以使用javax.xml.bind.DatatypeConverter.parseDateTime("2017-02-17T04:23:17.452Z"),这将返回Calendar对象。 您可以调用getTime()以获得Date对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值