2012-09-28 28 views
6

En mi aplicación ASP.NET utilizo el código from here para encontrar la fecha de compilación de la aplicación como UTC. El valor GMT leer desde el archivo de ensamblaje es entonces el siguiente formato:¿Por qué el mismo valor de DateTime arrojaría diferentes horas de visualización para diferentes usuarios?

//DateTime time  
return time.ToString("dd MMM yyyy HH:mm:ss"); 

Ahora un usuario abre la página servida por dicha aplicación y ve

28 сен 2012 04:13:56 

y notifique a la otra usuario que abre la misma página y ve

27 Sep 2012 12:14:32 

Ambas solicitudes son atendidas por la misma aplicación implementada para limpiar las máquinas virtuales de Windows Azure desde el mismo paquete, por lo que es sin duda exactamente el mismo código que se ejecuta para ambos usuarios.

Claramente, las cadenas tienen un formato diferente debido a la localización diferente para las solicitudes de diferentes usuarios. Un usuario ve el mes mostrado como Sep y el otro lo ve como сен (equivalente a Sep en ruso).

¿Por qué las horas difieren? ¿Están también ajustados de acuerdo a alguna zona horaria que depende de la localización?

+0

Bueno, sí lo son: el día y las horas son diferentes: obviamente, cuando son las 4 a. M. En Rusia el 28 de septiembre, es 12 el 27 de septiembre en algún otro lugar (ciertamente en la parte occidental de la tierra) ... pero qué es Es extraño que los minutos/seg. no cambien – Kek

Respuesta

3

La explicación más obvia es que los valores DateTime son, de hecho, diferentes.

El código se enlazó utiliza GetCallingAssembly, y debe tener en cuenta que MSDN says que:

Si el método que llama al método GetCallingAssembly se expande en línea por el compilador Just-In-Time (JIT), o si su llamador se expande en línea, el montaje que se devuelve por GetCallingAssembly puede diferir de forma inesperada

Para depurar este, me gustaría empezar por mostrar time.Ticks y time.Kind: si estos son idénticos, se sabe que es un problema de presentación. Si son diferentes, debe ver cómo está generando el valor del tiempo.

+0

Sí, eso es todo. El código que llama a la función que lee la marca de tiempo estaba dentro de .aspx, que está precompilado en la implementación real. De modo que, dependiendo de si la llamada está en línea, será tiempo de compilación o tiempo de precompilación de ASP.NET. – sharptooth

+0

Aquí se explica cómo deshabilitar la inserción de una función específica: http://stackoverflow.com/a/5169272/57428 – sharptooth

Cuestiones relacionadas