Java 8 ISO 8601带通配符字段的间隔语法



我需要解析一个类似于ISO 8601语法的时间间隔表达式,只允许字段使用通配符;并将开始和结束存储到两个CCD_ 1对象中。然后,我的Interval将具有API来与第三个LocalDateTimeOffsetDateTime进行比较,以检查它是落在间隔内还是落在间隔外。

例如:解析"****-**-**T00:00:00Z/****-**-**T11:55:00Z"时,开始和结束时刻的日期应为启动程序执行的日期(忽略运行到第二天的问题)。如何解析这样的表达式?

EDIT:为了明确起见,如果我今天运行它,它应该相当于解析"2016-04-06T00:00:00Z/2016-04-06T11:55:00Z"

我认为在使用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);

最新更新