我正在从维基数据读取数据。它们代表它们的时间点属性,P585 使用 ISO 8601 规范。然而,同样的存在带有+。
如果我使用 Joda,那么将字符串转换为 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)
但徒劳。
我们如何绕过加号而不必通过字符串操作将其删除?
Java's 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);
}
}
请参阅名为格式化和解析模式 in the DateTimeFormatter 的 javadoc有关传递给的格式字符串的详细信息DateTimeFormatter.ofPattern()
.
需要注意的是:
维基数据的可用数据类型列表说关于time
数据类型:
“时间点的显式值,表示为时间戳类似ISO 8601,例如+2013-01-01T00:00:00Z。年份始终带有签名并填充为 4 到 16 位数字.".
所以维基数据的time
仅数据类型类似于ISO 8601。
如果您的代码需要处理负年份(0 年之前),您将需要相应地调整我建议的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)