2010-05-04 39 views
15

Tengo una base de datos que contiene un tiempo como UTC. Esta vez se puede mostrar en una página web, por lo que me han pedido que la muestre como hora local en la página, ya que se puede ver desde cualquier país. Un colega mencionó algo sobre cómo obtener la configuración del país del hilo actual (en el servidor), pero no pude encontrar ningún detalle sobre esto. ¿Es lo que quiero hacer posible?¿Cómo mostrar una hora UTC como hora local en una página web?

+0

echar un vistazo a esta pregunta: http: // stackoverflow.com/questions/85116/how-do-i-display-a-date-time-in-the-users-locale-format-and-time-offset –

Respuesta

17

Si usted (y su sitio web) se siente cómodo con javascript, hay una manera muy fácil de lograr esto.

En primer lugar, en el lado del servidor, tendría la fecha/hora UTC formateada en formato RFC 3339 (el estándar para el tiempo de Internet utilizado por, entre otros protocolos, icalendar). La sintaxis básica de la RFC 3339 es:

YYYY-MM-DDTHH:MM:SS 

tal que donde yo estoy, el tiempo sería:

2010-05-04T05:52:33 

Pero cuando el tiempo no es local, pero GMT, se agrega una Z a la fin para denotar esto. Así que en mi caso, ya que estoy en -0500 horas de GMT, al mismo tiempo anterior sería:

2010-05-04T10:52:33Z 

Así, en primer lugar presentamos lo mejor servidor para dar salida a los anteriores a javascript de su página web. El javascript puede analizar esa marca de tiempo y mostrará la fecha y la hora ajustadas a la zona horaria del navegador (que está determinada por la computadora que aloja el navegador). Debe recordar que si un usuario es de Tokio y está viendo su sitio web en España, verá la fecha y hora en Tokio a menos que haya ajustado el reloj de su computadora.

Así que el javascript sería:

var time_string_utc = some_server_variable; // timestamp from server 
    var time_string_utc_epoch = Date.parse(time_string_utc); 
    var time_utc = new Date(); 
    time_utc.setTime(time_string_utc_epoch); 

En este punto, usted tiene un objeto de fecha Javascript a establecer a su marca de hora UTC.Una explicación rápida de lo que sucede arriba:

La primera variable asume que ha pasado la cadena de marca de tiempo a esa variable del servidor.

La segunda variable usa el método Date.parse() para convertir la cadena en una marca de tiempo de época.

La tercera variable crea el objeto Date sin configurar.

La última línea de línea usa el método setTime, que establece un objeto Date de una marca de tiempo epoch.

Ahora que tiene el objeto, puede mostrarlo al usuario como mejor le parezca. Como un experimento simple, puede utilizar:

document.write(time_utc); 

el cual, si está en mi zona horaria utilizando la marca de hora UTC Me comenzó con:

2010-05-04T10:52:33Z 

daría:

Tue May 04 2010 05:52:33 GMT-0500 (CST) 

pero puedes usar varios métodos de JavaScript para formatear el tiempo en algo mucho más agradable.

No es necesario adivinar el país del usuario o incluso ajustar su marca de tiempo, siempre y cuando confíe en la zona horaria del navegador/computadora local del usuario.

Una vez más, la versión corta:

var time_string_utc = some_server_variable; // UTC time from server 
    var time_string_utc_epoch = Date.parse(some_server_variable); 
    var time_utc = new Date(); 
    time_utc.setTime(time_string_utc_epoch); 
    document.write(time_utc); 
+0

Tu código parece que hará lo que necesito. El problema que tengo es que no sé mucho sobre javascript. En este momento estoy rellenando mi DataGrid con la fecha y hora de esta manera: ¿Cómo puedo usar su script con esto? – Retrocoder

+0

Si usa clases o ID establecidos para sus elementos que contienen tiempo, puede hacer que javascript ajuste los tiempos en la carga de la página. No sé lo suficiente acerca de ASP para saber cómo su código se convertirá en HTML, pero si puede darme una muestra del código HTML de las marcas de tiempo, podría mostrarle cómo agregar Javascript para ajustarlo después de cargar la página. – Anthony

+0

@Anthony En sus dos fragmentos de código, la variable 'time_string_utc' no se utiliza. Sería más claro usarlo o eliminarlo. –

0

Por supuesto es posible. Solo necesita encontrar country settings para detectar el país del que proviene su usuario y luego modificar la fecha mostrada para que coincida con la hora de ese país. También puede encontrar otra forma de detectar el país del usuario (tal vez desde su dirección IP).

Estoy seguro de que la mejor forma de gestionar esto es informar a su colega que necesita más detalles sobre la implementación de las configuraciones del país en su proyecto y cómo puede usarlo.

0

EDIT:

Pensando en ello, no creo que es posible mostrar la hora local una vez que tenga la cultura del cliente. Ciertamente me interesaría ver la sugerencia de tus colegas.

Obtener la cultura de EE. UU., Por ejemplo, no servirá, ya que EE. UU. Tiene muchos husos horarios.

Creo que el uso de Javascript como Anthony sugiere que sería el camino a seguir ...

VIEJO:

Puede reemplazar el método InitializeCulture() con el código que establece la corriente (elegido o informar navegador) culturas:

Thread.CurrentThread.CurrentCulture = 
      CultureInfo.CreateSpecificCulture(selectedLanguage); 
Thread.CurrentThread.CurrentUICulture = new 
      CultureInfo(selectedLanguage); 
+0

¿Así que ASP.NET puede detectar la zona horaria del visitante automáticamente? ¿Cómo? –

+0

No creo que pueda obtener el huso horario automáticamente. Si obtiene la cultura del navegador o del usuario, "obtener la configuración del país", eso es parte del proceso. Supongo que eso es lo que quiso decir su colega. –

+0

Dicho esto, obtener la cultura de EE. UU., Por ejemplo, no ayudará ya que EE. UU. Tiene muchas zonas horarias. Tal vez mi respuesta apesta por ASP.NET también. Esta es una interesante ... –

1

También considerar la lectura this thread la que se sumerge más profundamente en los dos y donts de manejo de horario de verano problema a través de zonas horarias

Cuestiones relacionadas