2009-02-14 8 views
6

Estoy trabajando en un sitio que permite a los usuarios añadir entradas de calendario, en la página principal de todos los usuarios pueden ver estas entradas con un texto diciendo cuánto tiempo hasta que esas entradas están al día, por ejemplo,Tiempo ASP.Net localización

entrada 1: 5 Minutos
entrada 2: 7 Horas
de entrada 3: 4 días

El problema que estoy teniendo es que todo el mundo podría estar en diferentes zonas horarias. Decidí que quiero almacenar todas las horas/fechas en GMT.

Lo que estoy molestando es cuando un usuario envía una entrada de calendario, por ejemplo, para el 1/1/2009 10:30 AM. Entonces necesito averiguar qué hora es esta fecha en GMT para el almacenamiento. ¿Hay alguna forma de saber cuál es la zona horaria/hora local de los usuarios para poder compararla con la hora del servidor (GMT) para realizar la conversión?

Realmente espero que esto tenga sentido. Espero poder hacerlo sin tener que preguntar al usuario en qué zona horaria se encuentran ni forzar al usuario a ingresar todas las fechas en GMT.

Respuesta

5

Convierta la fecha y hora al lado del cliente GMT (en JavaScript si es una aplicación web) antes de enviarla al servidor. Deje que el servidor solo funcione con GMT (yo diría UTC). Lo mismo para mostrar fechas/hora. Envíe GMT/UTC al cliente y deje que JS localice. Esta es la única manera completamente segura en mi opinión, porque deja que sea el sistema operativo del usuario quien determine cuál es el momento.

Existen otros enfoques de causa, y si solo necesita saber cuál es la hora del cliente en este momento, puede obtener el desplazamiento (se puede recuperar a través de JS, etc.). Pero si necesita fechas/horas precisas en diferentes ubicaciones para fechas/horas históricas y futuras, es mejor dejar que el cliente las maneje.

PD: En mi implementación TimeZone también uso el formato de hora UNIX para la comunicación entre el cliente y el servidor. Esto es simplemente más fácil de analizar, y creo que es el formato nativo de fecha y hora para JS. No puedo presentar mi código ahora, pero debería ser relativamente fácil buscarlo en Google.

1

Su única opción (además de la elección del usuario explícito) es obtener el desplazamiento de zona horaria desde el navegador:

var tzOffset = new Date().getTimezoneOffset(); // Minutes 

Luego hay que enviarlo al servidor mediante el uso de un campo oculto u otro método adecuado.

Esto le dará solo una compensación de zona horaria, no una información de zona horaria completa. Esto no es muy confiable, por lo que aún dejaría la elección al usuario, pero use esta información para preseleccionar un huso horario adecuado.