Análisis de patrones de año basado en la semana de la semana de Java Time con DateTimeFormatter
Necesito mostrar la fecha actual en el formatoweek-based-year
-week-of-week-based-year
, es decir, usando elFecha de la semana ISO donde la semana siempre comienza un lunes y la primera semana del año es la primera que tiene al menos cuatro días en enero (por lo tanto, la semana con el primer jueves de enero).
Dado que el 31 de diciembre de 2015 fue un jueves, de viernes a domingo, es decir, del 1 al 3 de enero de 2016, todos pertenecen a la 53a semana de 2015 (un "año largo"), y la primera semana de 2016 comienza el lunes 4 de enero.
Desde elDateTimeFormatter spec, Hubiera esperado poder usar el patrónYYYY-ww
Para hacer eso (Y
esweek-based-year
yw
esweek-of-week-based-year
)
Sin embargo, cuando intento algo como el siguiente caso de prueba simplificado:
String dateString = "2016-01-03";
LocalDate date = LocalDate.parse(dateString, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
String expectedOutput = "2015-53";
String actualOutput = date.format(DateTimeFormatter.ofPattern("YYYY-ww"));
System.out.println("Parsing " + dateString + ", expected "
+ expectedOutput + " but got " + actualOutput);
System.out.println(dateString + " as ISO week date: "
+ date.format(DateTimeFormatter.ISO_WEEK_DATE));
Entiendo esto:
Parsing 2016-01-03, expected 2015-53 but got 2016-02
2016-01-03 as ISO week date: 2015-W53-7
Entonces, usando el incorporadoISO_WEEK_DATE
el formateador hace lo que esperaba, pero usando el patrónYYYY-ww
parece darme lacalendario año y semana
¿He entendido mal algo sobre las fechas de la semana ISO, o hay un error en mi código, o ... me atrevo a decirlo ... es un error en eljava.time
biblioteca (como fue el caso deesta pregunta)?
Sé que podría solucionar esto usando un formateador personalizado como el siguiente, pero en mi caso realmente necesito que esto funcione usando un patrón.
new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendValue(IsoFields.WEEK_BASED_YEAR, 4, 10, SignStyle.EXCEEDS_PAD)
.appendLiteral("-")
.appendValue(IsoFields.WEEK_OF_WEEK_BASED_YEAR, 2)
.toFormatter();