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

Java 8 ISO 8601带通配符字段的区间语法,java,datetime,java-time,Java,Datetime,Java Time,我需要解析一个类似于ISO8601语法的时间间隔表达式,只允许字段使用通配符;并将开始和结束存储到两个LocalDateTime对象中。然后,我的Interval将有API与第三个LocalDateTime或OffsetDateTime进行比较,以检查它是否在间隔之内或之外 例如:解析“*****-***-**T00:00:00Z/*****-***-**T11:55:00Z”时,开始和结束瞬间的日期应为开始程序执行的日期(忽略运行到第二天的问题)。如何解析这样的表达式 编辑:为了明确起见,如果

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

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


编辑:为了明确起见,如果我今天运行它,它应该相当于解析
“2016-04-06T00:00:00Z/2016-04-06T11:55:00Z”
,我认为没有办法。一个不太好看的破解方法是用
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);

我认为没有办法。一个不太好看的破解方法是用
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);

不清楚的。字符串实际上是
“*****-***-**T00:00:00Z/*****-***-**T11:55:00Z”
?你希望结果是什么?@Tunaki,我认为示例很清楚,但现在添加了更多细节。好吧,但你想要的结果是什么?要将这两个datetime存储到两个
LocalDateTime
?计算这两个日期之间的时间间隔?我知道现在的混乱在哪里了。是的,我会将开始和结束都存储到LocalDateTime中。我仍然不明白只允许字段使用通配符。如果您有
“2016-04-06T00:00:00Z/2016-04-06T11:55:00Z”
,只需在
/
上拆分,并分别解析日期。不清楚。字符串实际上是
“*****-***-**T00:00:00Z/*****-***-**T11:55:00Z”
?你希望结果是什么?@Tunaki,我认为示例很清楚,但现在添加了更多细节。好吧,但你想要的结果是什么?要将这两个datetime存储到两个
LocalDateTime
?计算这两个日期之间的时间间隔?我知道现在的混乱在哪里了。是的,我会将开始和结束都存储到LocalDateTime中。我仍然不明白只允许字段使用通配符。如果您有
“2016-04-06T00:00:00Z/2016-04-06T11:55:00Z”
,只需在
/
上拆分并分别解析日期。