ZoneId.of("UTC") en lugar de ZoneOffset.UTC ?Conocemos la diferencia entre los dos como se indica en ¿Cuál es la diferencia entre ZoneOffset.UTC y ZoneId.of("UTC")? .
Versión <tl;dr>:
ZoneOffset.UTC devuelve un mero ZoneOffset con ID "Z", desplazamiento de 0 y reglas de zona predeterminadas.ZoneId.of("UTC") devuelve un ZoneRegion con ID "UTC" y ZoneOffset.UTC incluidos.</tl;dr>
Para esta pregunta, asumo el uso de UTC simplemente para facilitar el manejo de la fecha y la hora y no, porque algo podría estar ubicado en la región UTC o alguna otra razón comercial para tener esto como ZoneRegion real.
Por ejemplo, cuando se trata de ZonedDateTime . La única diferencia que pude encontrar fue que se imprime de manera diferente.
2021-06-10T15:28:25.000000111Z 2021-06-10T15:28:25.000000111Z[UTC]Estamos teniendo discusiones de revisión de código de un lado a otro sobre esto, así que supongo que este conflicto no es poco común.
ZoneOffset.UTCZoneId.of("UTC")ZoneId.of("UTC") es solo una región que se ajusta a ZoneOffset.UTC y no pude encontrar ningún beneficio hasta ahora. Hasta donde yo sé, en UTC no existen datos relevantes para la región aparte de las reglas heredadas de ZoneOffset.UTC . A menos que realmente necesite la zona/región horaria UTC por algún motivo (por ejemplo, de negocios), debería preferir ZoneOffset.UTC . Tiene una ventaja (menor) en su huella de rendimiento y la ZoneRegion UTC no parece proporcionar ningún beneficio que pueda ver o pensar.
Sin embargo, debido a la complejidad de la API de fecha y hora de Java, es difícil saber si me estoy perdiendo algo en esta discusión.
¿Hay alguna razón por la que alguien debería usar ZoneId.of("UTC") ?
¿Hay alguna razón por la que alguien debería usar ZoneId.of ("UTC")?
No puedo (ahora mismo) pensar en ninguna buena razón.
Sin embargo, no es terriblemente malo hacer eso. Lo más probable es que haya un pequeño costo de tiempo de ejecución al hacer la búsqueda, pero es poco probable que importe. Y las dos formas son (OMI) igualmente legibles.
Sin embargo, si el nombre de la zona es un parámetro, podría encontrar un código como este:
String zoneName = "UTC"; // my default // Try to get a non-default zone // ... id = ZoneId.of(zoneName);que sería (en mi opinión) mejor que esto:
String zoneName = null; // Try to get a non-default zone // ... id = zoneName == null ? ZoneId.UTC : ZoneId.of(zoneName);