Estoy buscando una mejor comprensión de la siguiente historia de usuario:
John trabaja en Sidney. A las 9:00 de la mañana, registra un evento en una aplicación web que se ejecuta en un servidor en Zurich. Al día siguiente, viaja a Nueva York para una reunión de emergencia en la que se debe discutir el evento. Durante la reunión, busca el evento por fecha y hora.
Como lo veo, hay al menos dos problemas aquí:
- ¿Cómo debo guardar las marcas de tiempo en la base de datos?
- ¿Cómo debo presentarlos en la interfaz de usuario?
Cuando John busque el evento, sabrá que sucedió a las 9:00, pero ¿qué debe ingresar en el navegador web? No encontrará nada cuando ingrese "9:00" como marca de tiempo porque podría ser la hora de Zúrich o Nueva York (dado que no se ha encontrado el evento, la aplicación no tiene forma de saber que sucedió en Sidney, por lo que no puede seleccionar automáticamente la zona horaria correcta).
¿Cuál es una buena forma de pedirle al usuario una marca de tiempo que pueda incluir la zona horaria?
El segundo problema es cómo mostrar los resultados. Si equipos de todo el mundo necesitan discutir el evento (y encontrar eventos relacionados, piense en un ataque de cracker que se dirija a varios sitios en todo el mundo a la vez).
¿Cuál es un buen ejemplo para mostrar marcas de tiempo que podrían haberse creado en una zona horaria diferente?
Nota: Concéntrese en la usabilidad del requisito. Yo mismo puedo averiguar el mapeo de la base de datos. Actualmente, no estoy seguro del flujo de trabajo. Debe solicitar / presentar la información necesaria de una manera no intrusiva / intuitiva. Si puede, proporcione un enlace a una aplicación web existente que ya resuelva esto.
fuente
Respuestas:
El problema de almacenar marcas de tiempo es simple: guárdelos en UTC.
En cuanto a mostrarlos, tendría sentido tomar la configuración de la zona horaria del dispositivo y usarla como la zona horaria actual. Dicho esto, debería haber un menú desplegable de zona horaria junto al cuadro de "entrada de tiempo", que por defecto es la zona horaria actual del dispositivo, para que el usuario pueda cambiarla si es necesario.
La mayoría de sus usuarios probablemente no cambiarán las zonas horarias mucho, o en absoluto. En su mayor parte, la situación que describió es poco común. Al implementar un menú desplegable con un valor predeterminado adecuado, debería poder facilitar las cosas a quienes se mueven (porque normalmente comprenden mejor las zonas horarias que un no viajero).
De hecho, sería incluso mejor guardar la zona horaria en la que se configuró el dispositivo cuando se ejecutó la aplicación por primera vez y luego ver si alguna vez cambia. Si cambia, entonces el usuario probablemente sea un viajero y probablemente se beneficiaría de tener el menú desplegable de zona horaria. De lo contrario, simplemente no muestre el menú desplegable y por defecto la zona horaria del dispositivo (porque el usuario no necesita conocerlos). En cualquier caso, tenga una configuración en la aplicación que le permita al usuario mostrar / ocultar manualmente el menú desplegable de zona horaria.
Para resumir lo anterior:
fuente
En nuestras aplicaciones, generalmente almacenamos la zona horaria del usuario cuando nos registramos por primera vez, como se ve a menudo en los sitios de foros, y siempre mostramos la hora con la zona horaria .
En cuanto a almacenar las fechas, UTC es el camino a seguir. Convierta a UTC y péguelo en la base de datos. Mientras recupera, simplemente convierta la hora a la zona horaria establecida para el usuario.
Tuve que resolver un caso de uso similar, en el que se podían enviar notificaciones personalizadas, como "Feliz año nuevo", a todos los usuarios de la aplicación web. Dado que los usuarios están repartidos por todo el mundo, necesitábamos mostrar la notificación de acuerdo con la zona horaria. El almacenamiento de la marca de tiempo en UTC cumplió muy bien nuestro propósito, sin contratiempos.
En su caso de uso, si no está almacenando la zona horaria del usuario en algún lugar, nunca podrá devolver con precisión los resultados de su búsqueda sin solicitar la entrada del usuario, a menos que comience a usar algún tipo de detección de ubicación como lo hace gmaps, pero eso no es ' t confiable. Por lo tanto, deberá solicitar la zona horaria cada vez para asegurarse de que el usuario sepa lo que está ingresando en el sitio web.
Si tiene información de zona horaria, toda la aplicación web debe ejecutarse con la configuración de zona horaria. Por lo tanto, cuando el usuario busque las 9:00, buscará con la zona horaria de Sydney. Por otro lado, si crea un evento mientras está sentado en Nueva York, creará un evento con la zona horaria de Sydney. Resolvemos estos casos mostrando siempre la zona horaria mientras mostramos las fechas.
¡Espero eso ayude! :)
fuente
UTC. Mantenlo simple.
Utilice la zona horaria que sea más relevante para el usuario.
Si sabe que el usuario va a estar o viajar a Sydney para el evento, entonces estará pensando en esa zona horaria cuando organice el transporte al evento. El hecho de que se encuentren actualmente en Nueva York es en gran medida irrelevante. Y, por supuesto, si su aplicación muestra fechas en una variedad de zonas horarias, siempre debería mostrar la zona horaria junto a la fecha, por ejemplo, 09:00 EST .
Si no satura demasiado su interfaz, puede mostrar las fechas en la zona horaria del evento y la zona horaria local, por ejemplo, 2012-06-13 09:00 EST (2012-06-12 19:00 EDT) .
Yo diría que la búsqueda es un problema similar, con una advertencia: podemos tolerar los falsos positivos (obteniendo un resultado que no esperábamos), pero no podemos soportar los falsos negativos (no obteniendo el resultado que esperábamos).
Una vez más, me centraría en buscar la zona horaria más relevante para el usuario (por ejemplo, la zona horaria del evento) y dar prioridad a estos resultados en los resultados de búsqueda, pero también puede devolver eventos que coincidan en otras zonas horarias que sean relevantes para el usuario (por ejemplo, hora local). Si hace esto, debe mostrar la fecha del evento en la zona horaria coincidente, especialmente si resalta el texto coincidente.
fuente
Aquí estoy dando sugerencias para la mejor usabilidad sin preocuparme mucho por la viabilidad de la implementación.
1. Para el primer número de almacenamiento de eventos en db, todos estarían de acuerdo en almacenarlo en UTC
2. Para brindar la mejor experiencia de usuario, guarde el historial de la zona horaria del usuario. Si pudiera guardar la marca de tiempo del cambio de zona horaria, aún mejor. Esto nos permitirá dar libertad al usuario para realizar consultas sin especificar la zona horaria de forma explícita cada vez.
3. ¿Cuál es una buena manera de pedirle al usuario una marca de tiempo que pueda incluir la zona horaria?
4.Cómo mostrar los resultados, si equipos de todo el mundo necesitan discutir el evento:
Estas sugerencias se dan con la intención de que el usuario no necesite hacer ningún cálculo en su hora local, pero al mismo tiempo debería poder comunicarse con otros usuarios con fluidez en su zona horaria preferida.
fuente
Ok, tengo un enfoque diferente al de otros:
En primer lugar, asumí algunas cosas de antemano.
La persona que está listando un evento tiene un teléfono inteligente (si es un navegador, no tengo que hacer estas suposiciones) con:
GPS
Capacidad HTML5.
Capacidad de Javascript
Solución: Obviamente UTC , superpuse el procedimiento a continuación:
Paso 1. Utilice la geolocalización del usuario mediante la API de geolocalización
Paso 2. Dé (Long, Lat) como argumentos a algunas de las api (Lat, Long) to TimeZone como la API de Yahoo (use Flag R para convertir la latitud en Timezone) para obtener la zona horaria de los usuarios.
=> La zona horaria del usuario se determina sin la entrada del usuario (estoy usando esto porque no se puede simplemente asumir que el usuario conoce la zona horaria del lugar en el que vive, supe mi zona horaria solo después de unos meses o algo en el lugar: P, ¡bastante tonto! )
La tabla de cada evento tiene
Timezone
,Event
y también puede tener.CityName
Luego, cree otra tabla de base de datos con una clasificación basada enCityName
s. Entonces aquí el usuario tendrá dos columnas=> use la API de Google Calendar o algunas de las API de Calendar
Lecturas relacionadas:
Determine la zona horaria a partir de la latitud / longitud sin utilizar servicios web como Geonames.org
Búsqueda de zona horaria a partir de latitud y longitud
Sé que solo se trata de mostrar una idea de cómo resolver este problema. Pero vea qué tan precisa y liviana se vuelve para los usuarios cuando la zona horaria se determina mediante el uso de API de dispositivo
¡Espero eso ayude!
fuente
new Date().getTimezoneOffset()
lo da en minutos detrás de UTC.Para ese caso particular, me almacenar tanto la hora local y UTC. UTC es algo importante y se utiliza para sincronizar y convertir la hora a la zona horaria actual. Local se usa para búsquedas y para información adicional, como:
Tienes una reunión:
o algo así. La otra forma es almacenar la zona horaria de creación y convertir en tiempo de ejecución (esto es particularmente mejor en caso de que el usuario cambie la hora de la reunión). De cualquier manera, la razón principal es poder restaurar el tiempo de creación original para que el usuario pueda consultarlo.
fuente
En la creación del evento, almacenaría la hora UTC y la zona horaria local (también conocida como
creation time zone
). Usaría lo que almacené para convertir la hora UTC en hora local (también conocida comocreation time
) y almacenarla junto con la hora UTC ycreation time zone
.NOTA: Puedo almacenar la hora local desde el principio, pero cuando el usuario busca un evento, espero que exista una conversión a la hora local. También espero que el servidor pueda detectar en qué zona horaria se encuentra el cliente.
Cuando un usuario busca "9:00", yo buscaría eventos que incluyan "9:00" en UTC O
creation time
O en hora local. Para los resultados, mostraría una tabla de resultados encreation time
(Esto está destinado a mostrar marcas de tiempo que pueden haber sido creadas en una zona horaria diferente, ya que asumimos que el usuario está buscando a qué hora creó un evento para donde sea que esté). y muestre una segunda tabla de resultados a continuación con resultados relacionados, tal vez con el encabezado "¿No es lo que está buscando? Ver resultados relacionados" (estos incluyen los resultados restantes de UTC y hora local).En general, mostraría la hora UTC, la hora local
creation time
, y elcreation time zone
(es decir, la hora local y la zona horaria del evento donde se creó) ordenados por hora UTC, para que pueda ver qué evento viene primero, en caso de que haya dos diferentes Los eventos estaban programados para las 9:00 en dos zonas horarias diferentes.fuente
BETWEEN
condiciones 24x ).