使用Java 8解析周字符串以进行比较

Tom*_*Tom 2 datetime parsing java-8 java-time

我想比较几周的字符串表示,例如"01/17"周在"02/17"之前和"52/16"之后.

以下代码抛出一个异常,我猜是因为我的字符串没有暗示每周的确切日期.但是,我不在乎 - 它可能都是星期一或星期四或其他什么:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ww/YY", Locale.GERMANY);
LocalDate date1 = formatter.parse(str1, LocalDate::from);
Run Code Online (Sandbox Code Playgroud)

我需要修改解析器吗?或者解析其他格式?Unfortunatley几周没有像YearMonth这样的对象......

ass*_*ias 5

星期一说,一种解决方案是始终默认为同一天.您可以为此构建自定义格式化程序:

DateTimeFormatter fmt = new DateTimeFormatterBuilder()
          .appendPattern("ww/YY")
          .parseDefaulting(ChronoField.DAY_OF_WEEK, 1)
          .toFormatter(Locale.GERMANY);
Run Code Online (Sandbox Code Playgroud)

您现在可以构建LocalDate代表给定周的星期一的s:

LocalDate d1 = LocalDate.parse("01/17", fmt);
LocalDate d2 = LocalDate.parse("52/16", fmt);
System.out.println(d1.isAfter(d2));
Run Code Online (Sandbox Code Playgroud)

打印true因为01/17是在52/16之后.