我有一个API,可以用三种可能的格式返回JSON中的日期值:
我需要将所有三个转换为java.time.LocalTimeDate
。 Joda在DateTime
对象上有一个很好的构造函数,它接受所有三种格式作为字符串并转换它们。 DateTime dt = new DateTime(StringFromAPI);
就足够了。
Java 8(java.time
包)中是否有类似的功能?我现在首先必须使用String
正则表达式来检查格式,然后创建LocalDateTime
,ZonedDateTime
或LocalDate
并将后者转换为{{1} }}。对我来说似乎有点麻烦。有一个简单的方法吗?
答案 0 :(得分:3)
我提出两种选择,每种选择都有其优点和缺点。
一,构建自定义Fixes a bug which blocked ChromeDriver automation extension from loading and thereby causing window resizing/positioning & screenshot functionalities to break.
以接受三种可能的格式:
DateTimeFormatter
一方面,它很干净,另一方面,有人可能很容易发现它有点棘手。对于问题中的三个示例字符串,它会产生:
public static LocalDateTime parse(String dateFromJson) {
DateTimeFormatter format = new DateTimeFormatterBuilder().append(DateTimeFormatter.ISO_LOCAL_DATE)
.optionalStart()
.appendLiteral('T')
.append(DateTimeFormatter.ISO_LOCAL_TIME)
.optionalStart()
.appendOffsetId()
.optionalEnd()
.optionalEnd()
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.toFormatter();
return LocalDateTime.parse(dateFromJson, format);
}
另一种选择,依次尝试三种不同的格式并选择有效的格式:
2017-04-30T00:00
2016-12-05T04:00
2016-12-05T00:00
我不认为这是最漂亮的代码,有些人可能认为它比第一个选项更直接吗?我认为单纯依靠内置的ISO格式是有品质的。三个示例字符串的结果与上面相同。