On Wed, 4 Oct 2023 11:33:16 GMT, Claes Redestad <redes...@openjdk.org> wrote:
> I think this deserves a discussion on the mailing list before jumping to a > PR, as neither `%tF` nor the ISO-8601 standard it defers to is particularly > well-defined outside of the range 0-9999 Thank you @cl4es for your suggestion, I have sent an email to mailing. j.t.DateTimeFormatter defines ISO_LOCAL_DATE, j.u.Formatter.DateTime also defines ISO_STANDARD_DATE ("%tF"), and now their behavior is different outside the range of [0,9999], We run the following code and we can see their different behaviors: DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE; int[] years = {-99999, -9999, -999, -99, -9, 0, 9, 99, 999, 1999, 2999, 9999, 99999}; for (int year : years) { LocalDate localDate = LocalDate.of(year, 1, 1); System.out.println(formatter.format(localDate) + "\t\t->\t\t" + "%tF".formatted(localDate)); } * output -99999-01-01 -> 100000-01-01 -9999-01-01 -> 10000-01-01 -0999-01-01 -> 1000-01-01 -0099-01-01 -> 0100-01-01 -0009-01-01 -> 0010-01-01 0000-01-01 -> 0001-01-01 0009-01-01 -> 0009-01-01 0099-01-01 -> 0099-01-01 0999-01-01 -> 0999-01-01 1999-01-01 -> 1999-01-01 2999-01-01 -> 2999-01-01 9999-01-01 -> 9999-01-01 +99999-01-01 -> 99999-01-01 ------------- PR Comment: https://git.openjdk.org/jdk/pull/16033#issuecomment-1746990262