2011-12-21 64 views
10

Necesito configurar la zona horaria predeterminada para mi ASP.NET en Asia/Dhaka o GMT + 6 zona horaria. Pero no puedo encontrar una manera de cambiarlo globalmente. Hay mucha referencia en Stackoverflow y el resto de la web para hacer esto al obtener información de la zona horaria y calcular el tiempo correcto para cada vez que necesito un objeto DateTime.Cómo cambiar la zona horaria para una aplicación asp.net

Pero créanme, no quiero hacer esto de esta manera. Así que no me des ninguna sugerencia como esa. Quiero configurar la zona horaria en Asia/Dhaka o GMT + 6 preferiblemente desde web.config. (Hacemos lo mismo en php con php.ini) De modo que cada vez que necesito el objeto DateTime, la hora se evalúa con mi zona horaria sin importar la zona horaria del servidor.

¿Esto es posible? Si es posible, ¿cómo? Gracias de antemano por la solución :)

+4

* * ¿Por qué no quiere hacer las cosas bien? Tenga en cuenta que un 'DateTime' no * tiene * un huso horario inherente. (De alguna manera, es un tipo bastante extraño). Debería * por lo general * (pero no siempre) mantener todo en UTC, excepto cuando vaya al usuario o desde él, ¿por qué no desea seguir ese patrón común? –

+1

el problema es que tengo muchos objetos de fecha y hora en más de 100 páginas aspx, y necesito renderizarlos en la zona horaria local. No estoy en contra de mantenerme siempre en UTC. Pero necesito una solución para procesar el tiempo en la zona horaria local en páginas aspx sin cambiar todas las páginas. –

+1

Parece que lo que * realmente * necesita es un lugar central para poner el código de representación 'DateTime', que luego * llama * a todas partes que necesita para representar un' DateTime'. Es posible que necesite cambiar todas sus 100 páginas una vez, pero cualquier otro cambio en la forma en que necesite las fechas/horas procesadas solo necesitaría un cambio en un solo lugar. –

Respuesta

8

Lo sentimos, no hay manera en .NET para cambiar la zona horaria a nivel mundial.

La única manera que tiene es cambiar la zona horaria de su servidor o volver a escribir todo su código.

La mejor práctica es no confiar en absoluto en la zona horaria del sistema (nunca utilice DateTime.Now).

Debe manejar todas las fechas como fechas Utc y luego convertirlas a una zona específica al mostrarlas a los usuarios.

Incluso si logra manejar zonas horarias en su aplicación ASP.NET, todavía hay zonas horarias en SQL Server, por ejemplo, la función GETTIME. Si su aplicación está completamente escrita en UTC, su función de servidor SQL también funcionará.

+0

La configuración de globalización no cambiará la forma en que funciona el objeto DateTime, como se resaltó, ya que la mayoría de los países tendrán muchas zonas horarias, por lo que no sabría cuál usar. – davidsleeps

+1

gracias por la sugerencia, parece que cambia el formato de acuerdo a la zona de cultura. Pero no el tiempo compensado. Estoy de acuerdo en manejar todas las fechas como utc, pero necesito una manera de convertirlas cada vez que las muestre. En mi aplicación, ya tengo cientos de objetos DateTime. Estoy buscando una forma distinta de buscar todos estos y reemplazarlos uno por uno por un método util. : s: s –

+0

Ayuda mucho buscando la misma solución para mi aplicación. se hace casi la misma pregunta en http://stackoverflow.com/questions/14293858/how-to-set-default-time-zone-in-asp-net-application. – Pravin

2

Puede cambiar de zona horaria ... Y Obtener Fecha

DateTime utcTime = DateTime.UtcNow; 
    TimeZoneInfo myZone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); 
    DateTime custDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, myZone); 
    Str.Append(custDateTime.ToString()); 
1

Tengo un problema con la instrucción:

TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); 

Así que ... creo un TimeZoneInfo personal.

Aquí mi código ...

public static DateTime DateNow() 
     { 
      DateTime utcTime = DateTime.UtcNow; 
      TimeZoneInfo myZone = TimeZoneInfo.CreateCustomTimeZone("COLOMBIA", new TimeSpan(-5, 0, 0), "Colombia", "Colombia"); 
      DateTime custDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, myZone); 
      return custDateTime; 
     } 
Cuestiones relacionadas