Gestión de calendario, fecha y hora de Java para una aplicación de zona horaria múltiple

Estoy diseñando una aplicación web de progtwigción. Espero que los eventos sean agregados por los usuarios en diferentes zonas horarias y configuraciones regionales. El desafío es la presentación correcta de estos eventos.

Entonces, como un ejemplo:
si un usuario está en zona horaria EST y está buscando un evento de seminario web que otro usuario agregó en PST, quiero convertir la hora de evento PST real en una hora local para el visor. Por lo tanto, si un evento está progtwigdo para las 2 p.m. PST, entonces debe mostrarse como 5 p.m. EST.

También quiero tener cuidado de que el rendimiento no tenga éxito si hay miles de eventos que pueden requerir una conversión del tiempo real del evento a la hora local del espectador.

Todos los pensamientos y comentarios son apreciados.
TIA

En general, progtwigr eventos futuros es un tema complejo. Tienes que hacer una distinción en el contexto de lo que se va a progtwigr:

  • ¿El evento ocurre en un instante universal específico en el tiempo? Si es así, debe registrar la hora del evento en términos de UTC.

    Por ejemplo, una tarea que se ejecuta cada 24 horas se progtwigría por hora UTC y no por hora local. Puede comenzar a medianoche local, pero a medida que cambian los horarios de verano , podría estar funcionando a las 23:00 o 01:00 con el reloj local.

  • Sin embargo, si el evento está progtwigdo por seres humanos, es probable que sea en términos de una hora local, por lo que debe grabarlo de esa manera.

    Por ejemplo, una reunión que ocurre a las 08:00, hora del este, siempre ocurrirá a esa hora local . En el invierno, eso sería a las 13:00 UTC, y en el verano sería a las 12:00 UTC.

    Por lo tanto, en este contexto, no puede registrar la hora de inicio progtwigda en términos de UTC. Este es un error muy común, ya que hay muchísimos consejos en Internet que dicen “siempre almacenar usando UTC” , lo que sería incorrecto en este escenario.

    En su lugar, debe almacenar dos valores: la hora local como 08:00 y su identificador de zona horaria IANA, como America/New_York . Es posible que también deba almacenar un patrón de recurrencia o una fecha específica según cómo esté progtwigdo el evento.

  • Considere usar Joda Time en lugar del Calendar de Java o la clase de Date . Le salvará de muchos dolores de cabeza. Asegúrese de leer la documentación de Joda Time y comprender cómo funciona.

    Joda Time tiene todas las funciones que necesitará para convertir entre una zona horaria y otra, lo que creo que fue la principal preocupación de su pregunta.

  • Asegúrese de tener un procedimiento para actualizar los datos de la zona horaria regularmente. Las actualizaciones se envían varias veces al año, a medida que los gobiernos del mundo realizan cambios en las definiciones legales de sus husos horarios. No puedes simplemente implementarlo una vez y olvidarlo.

  • Además, asegúrese de comprender que la conversión de la hora local a un momento UTC específico no es una función perfecta debido al horario de verano . Si un evento está progtwigdo durante una hora local no válida o ambigua, debe tener una estrategia para detectarlo y tratarlo en su aplicación. Puede aplicar algunas suposiciones, o puede querer hacer un esfuerzo para preguntarle al usuario qué hacer.

    Por ejemplo, si programo un evento a las 2:00 a.m. hora del este todos los días, el 10 de marzo de 2013, ese momento no existe. ¿Debería ocurrir el evento a las 3:00 AM? ¿O no debería ocurrir en absoluto?

    Otro ejemplo, si programo un evento a la 1:00 AM, hora del este, todos los días, el 3 de noviembre de 2013, ese momento se produce dos veces . ¿Debería suceder el evento en la primera instancia (horario de verano)? ¿O en la segunda instancia (tiempo estándar)? ¿O ambos? ¿Debería asumir uno u otro, o debería preguntar al usuario qué significan?

    Solo tú puedes decidir qué hacer, ya que es tu aplicación. Pero ignorar el problema probablemente lleve a errores.

  • Una vez que ha pasado un evento, puede grabarlo en UTC si lo desea, o grabarlo con la hora local completa y el desplazamiento. Cualquiera de los dos es aceptable. Esto funciona bien para eventos pasados ​​singulares, solo que no para futuros eventos recurrentes.

    Intereting Posts