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

标签 java datetime java-time

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

例如:解析“***-**-**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/

相关文章:

java - 有没有办法从一定数量的特定 TemporalUnit 创建一个周期?

java - 在 JSR-310 中计算修改后的儒略日

java - 将 log4j.xml 转换为 log4j2.xml 的惰性方法

python - 如何获取日期时间使用的时区规则版本?

datetime - 如何清空 SOAP Web 服务中的日期时间字段?

java - 在 java 中将 RFC3339 DateTime 转换为 Date

java - JSTL 标签会自动转义 HTML 吗?

java - 将四种方法合二为一

java - 抛出 IOException 和 RuntimeException 之间的区别

java - 如何使用 DateTimeFormatter 解析非标准月份名称