将ISO8601字符串转换为DateTime格式?

时间:2013-05-10 20:24:44

标签: java date jodatime

我想要转换为20130510T202132Z对象的字符串DateTime

我一直在尝试使用Joda来实现这一点,但我无法让它工作。 我已经点击了我能找到的关于这个主题的每个链接 - 并且使用了格式化程序,但它根本就没有用完。

这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:9)

Joda Time让这非常简单,因为它内置了对ISO格式的支持:

DateTimeFormatter iso = ISODateTimeFormat.basicDateTimeNoMillis();
DateTime dateTime = iso.parseDateTime(text);

答案 1 :(得分:0)

Joda-Time项目现在处于维护模式,团队建议迁移到java.time类。

DateTimeFormatter

不幸的是,从Java 8开始,java.time中没有预定义标准ISO 8601格式的“基本”(最小分隔符)版本。使用DateTimeFormatter类来指定匹配模式。

String input = "20130510T202132Z";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "uuuuMMdd'T'HHmmssX" );

顺便说一句,包含2013-05-10T20:21:32Z等分隔符的版本称为extended version of ISO 8601

OffsetDateTime

解析为OffsetDateTime个对象。此类表示时间轴上调整为某个offset-from-UTC的时刻,解析为纳秒。在这种情况下,偏移量本身为UTC

OffsetDateTime odt = OffsetDateTime.parse ( input , f );
  

odt.toString():2013-05-10T20:21:32Z

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date.Calendar和& java.text.SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore