【发布时间】:2020-08-12 08:33:25
【问题描述】:
我试图解析一个包含未知格式日期的字符串,我选择的方式(不是最好的)是尝试所有可能的格式,直到正确解析。为此,我使用 Vavr 库,直到现在我已经创建了这样的东西:
// My unknown date
String date = "2020-11-12T15:15:15.345";
// Date format that works for my unknown date (just for testing)
DateTimeFormatter FORMATTER = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss[.SSS]")
.parseDefaulting(ChronoField.OFFSET_SECONDS, 0)
.toFormatter();
OffsetDateTime value = OffsetDateTime.parse(date, FORMATTER); // PARSE CORRECTLY
// Try all possible formats until one works
Try<OffsetDateTime> myParsedDate = Try.of(()->date)
.map(x->OffsetDateTime.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd")))
.onFailure(x->System.out.println("NO yyyy-MM-dd"))
.map(x->OffsetDateTime.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS+HH:mm")))
.onFailure(x->System.out.println("NO yyyy-MM-dd'T'HH:mm:ss.SSS+HH:mm"))
.map(x->OffsetDateTime.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS+HH:mm")))
.onFailure(x->System.out.println("NO yyyy-MM-dd'T'HH:mm:ss.SSS+HH:mm"))
.map(x->OffsetDateTime.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS")))
.onFailure(x->System.out.println("NO yyyy-MM-dd'T'HH:mm:ss.SSS"))
.map(x->OffsetDateTime.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ")))
.onFailure(x->System.out.println("NO yyyy-MM-dd'T'HH:mm:ss.SSSZ"))
.map(x->OffsetDateTime.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")))
.onFailure(x->System.out.println("NO yyyy-MM-dd'T'HH:mm:ss"))
.map(x->OffsetDateTime.parse(date, FORMATTER)) // DOSENT WORK
.onFailure(x->System.out.println("NO yyyy-MM-dd'T'HH:mm:ss[.SSS]"));
if(myParsedDate.isSuccess()) {
System.out.println("OK");
}else {
System.out.println("KO");
}
输出:
NO yyyy-MM-dd
NO yyyy-MM-dd'T'HH:mm:ss.SSS+HH:mm
NO yyyy-MM-dd'T'HH:mm:ss.SSS+HH:mm
NO yyyy-MM-dd'T'HH:mm:ss.SSS
NO yyyy-MM-dd'T'HH:mm:ss.SSSZ
NO yyyy-MM-dd'T'HH:mm:ss
NO yyyy-MM-dd'T'HH:mm:ss[.SSS]
问题是:如何连接多个 try/catch 或者在这种情况下使用 VAVR 多个动作,当一个动作失败时尝试下一个动作,如此一来? 谢谢
【问题讨论】:
-
为什么不直接使用行得通的格式化程序?
标签: datetime java-8 java-time datetime-parsing vavr