我正在阅读维基数据中的数据。它们代表了他们的时间属性,P585使用ISO 8601规范。但是,与+相同的存在。
如果我使用Joda,那么将String转换为joda dateTime会非常简单。
new DateTime(dateTime, DateTimeZone.UTC);
然而,当我LocalDateTime.parse("+2017-02-26T00:00:00Z")
时,我收到一条错误,说不能解析索引0处的字符。在Java 8中是否存在这样的原因.Joda很容易做到没有任何错误。
我也试过LocalDateTime.parse("+2017-02-26T00:00:00Z", DateTimeFormatter.ISO_DATE_TIME)
,但徒劳无功。
我们如何绕过Plus标志而不必通过字符串操作将其删除?
答案 0 :(得分:5)
Java的DateTimeFormatter
课程可能有所帮助。以下是一些我认为可以解决您的问题的示例代码(或者至少可以让您思考一下):
class DateTimeTester {
---
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("+yyyy-MM-dd'T'HH:mm:ss'Z'")
.withZone(ZoneId.of("UTC"));
LocalDateTime date = LocalDateTime.parse("+2017-02-26T01:02:03Z", formatter);
System.out.println(date);
}
}
有关传递给DateTimeFormatter.ofPattern()
的格式字符串的详细信息,请参阅javadoc for DateTimeFormatter中名为 格式设置和分析的模式 的部分。< / p>
需要注意的事项:
Wikidata's list of available data types说明了time
数据类型:
&#34;时间点的显式值,表示为时间戳 类似于 ISO 8601,例如+ 2013-01-01T00:00:00Z。 年份总是签名并填充为4到16位。&#34;。
因此,维基数据的time
数据类型仅类似于 ISO 8601.
如果您的代码需要处理负数年份(在0年之前),则需要相应地调整我建议的解决方案。