我需要解析一个类似于ISO 8601语法的时间间隔表达式,只允许字段使用通配符;并将开始和结束存储到两个 LocalDateTime 对象中。然后,我的 Interval
将使用 API 与第三个 LocalDateTime
或 OffsetDateTime
进行比较,以检查它是否落在间隔之内或之外。
例如:解析“***-**-**T00:00:00Z/****-**-**T11:55:00Z”
时,开始和结束时刻的日期应该是开始程序执行的日期(忽略遇到第二天问题)。我怎样才能解析这样的表达式?
编辑:为了说清楚,如果我今天运行它,它应该相当于解析 "2016-04-06T00:00:00Z/2016-04-06T11:55:00Z"
。
最佳答案
我认为没有办法to use wildcards when parsing a string with java.time
。一个不太好看的黑客方法是将 *
替换为 1
:这不应该产生任何无法解析的日期。然后您可以忽略日期内容。
例如:
String input = "****-**-01T00:00:00Z/****-04-**T11:55:00Z";
String[] dates = input.replace("*", "1").split("/");
ZonedDateTime zdt1 = ZonedDateTime.parse(dates[0]);
ZonedDateTime zdt2 = ZonedDateTime.parse(dates[1]);
LocalDate day = LocalDate.now(); //or whatever date you like
LocalDateTime start = zdt1.toLocalTime().atDate(day);
LocalDateTime end = zdt2.toLocalTime().atDate(day);
System.out.println(start + " / " + end);
关于带有通配符字段的 Java 8 ISO 8601 间隔语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36456242/