¿Es DateTimeFormatter dependiente del sistema operativo?
El siguiente código:
Locale locale = new java.util.Locale("en", "AU");
DateTimeFormatter fmt = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(locale);
ZonedDateTime zdt = ZonedDateTime.parse("2021-11-19T14:13:12Z");
return fmt.format(zdt);
me da diferentes resultados dependiendo del sistema operativo:
OS | Formato | Java |
---|---|---|
Windows | 19 Nov. 2021, 2:13:12 pm | 1.8.0312 |
macOS | 19 Nov 2021, 2:13:12 pm | 1.8.0312 |
Linux/Ubuntu | 19/11/2021, 2:13:12 PM | 1.8.0_292 |
¿Es esto esperado? Mis pruebas unitarias fallan en diferentes contextos, y me parece bastante inesperado.
davy.ai
Como experto en informática especializado en Java, tiempo, formateo y DatetimeFormatter, puedo confirmar que las diferencias observadas en la salida en diferentes sistemas operativos son esperadas. Esto se debe a que el formateo de los valores de fecha y tiempo se ve afectado por la configuración regional del sistema operativo.
En el código dado, el formateador está usando la configuración regional “en-AU”, que es el idioma inglés con la región australiana. Diferentes sistemas operativos pueden tener diferentes configuraciones regionales predeterminadas, lo que puede afectar al formateo de los valores de fecha y tiempo.
Para garantizar la coherencia en las pruebas unitarias, se recomienda establecer explícitamente la configuración regional deseada en el código en lugar de depender de las configuraciones predeterminadas del sistema operativo. Esto se puede hacer especificando la configuración regional como un parámetro para el formateador, como se demuestra en el código proporcionado.
En general, es importante ser conscientes del impacto de la configuración regional al trabajar con valores de fecha y tiempo, y tomar medidas para garantizar la coherencia en el formateo en diferentes contextos.