我想要转换为20130510T202132Z
对象的字符串DateTime
。
我一直在尝试使用Joda来实现这一点,但我无法让它工作。 我已经点击了我能找到的关于这个主题的每个链接 - 并且使用了格式化程序,但它根本就没有用完。
这样做的最佳方式是什么?
答案 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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,.Calendar
和& java.text.SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。