Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

686
Visualizações
¿Cambiar la zona horaria en Azure Web Apps no funciona para DateTimeOffset.Now?

De acuerdo con varias publicaciones , Microsoft habilitó la capacidad de usar una configuración de aplicación, WEBSITE_TIME_ZONE , para controlar la zona horaria del servidor web.

Para probar esto, configuré este valor en "Hora estándar del este", que es mi zona horaria local.

En una página de ASP.NET MVC Razor, agregué el siguiente código:

 DateTime.Now: @DateTime.Now DateTimeOffset.Now: @DateTimeOffset.Now DateTime.UtcNow: @DateTimeOffset.UtcNow

cuando ejecuté esto anoche a las 5:10:07 p. m., hora estándar del este, dio el siguiente resultado:

 DateTime.Now: 6/18/2015 5:10:07 PM DateTimeOffset.Now: 6/18/2015 5:10:07 PM +00:00 DateTime.UtcNow: 6/18/2015 9:10:07 PM

Como puede ver, la configuración permitió correctamente que DateTime.Now devolviera el valor correcto en mi zona horaria en lugar de UTC, como suelen hacer los sitios web/aplicaciones web de Azure. DateTime.UtcNow siempre ha devuelto el valor correcto por razones obvias.

Sin embargo, DateTimeOffset.Now devuelve la hora local, pero con un desplazamiento de +00:00 , casi como si se cambiara el reloj en lugar de la zona horaria. Esto ocurre a pesar de que la documentación dice (énfasis mío):

Obtiene un objeto DateTimeOffset que se establece en la fecha y la hora actuales en el equipo actual, con el desplazamiento establecido en el desplazamiento de la hora local desde la hora universal coordinada (UTC) .

Entonces, ¿qué sucede con la configuración de WEBSITE_TIME_ZONE que afecta a DateTime.Now pero no a DateTimeOffset.Now ? ¿Y hay alguna manera de evitar eso?

Como punto de aclaración, realmente no quiero cambiar la zona horaria en el servidor. Estamos trabajando en una solución adecuada independiente de la zona horaria. Pero todavía tengo curiosidad por qué esto sucede de la manera que lo hace.

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Bueno, para mí funciona ahora mismo. Si no funciona, asegúrese de establecer el valor correcto

  1. Abrir registro
  2. Buscar "zonas horarias"
  3. Compruebe cómo se escribe su zona. Por ejemplo, mi zona es "Eastern EST (+2)" y en el registro su nombre es "E. Europe Standard Time"

Así que agregué a la configuración de la aplicación en la aplicación azul "WEBSITE_TIME_ZONE: E. Europe Standard Time" y funciona.

over 4 years ago · Santiago Trujillo Relatório

0

Para aquellos que tropiezan con esta pregunta. Esto está arreglado desde hace mucho tiempo.

over 4 years ago · Santiago Trujillo Relatório

0

Me estoy enfrentando al mismo problema. Desafortunadamente para mí, heredé una gran cantidad de código heredado que se escribió específicamente para la hora estándar del este, por lo que actualizarlo para que funcione con UTC no es una opción.

Después de profundizar en el código CLR, parece deberse al hecho de que la zona horaria local se compara con el registro del sistema. No veo cómo pueden admitir esto correctamente sin un cambio en el código CLR, ya que las aplicaciones web de Azure se ejecutan en máquinas virtuales compartidas.

Por el momento, solucionaré esto con el siguiente truco de reflexión al inicio del sitio para engañar a .Net para que piense que está en el horario estándar del este. No es una gran solución, y lo más probable es que se rompa si cambian la implementación de la clase TimeZoneInfo, pero es de esperar que la razón por la que la cambien sea para solucionar este problema.

 // rewrite local timezone var tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); var fInfo = typeof(TimeZoneInfo).GetField("s_cachedData", BindingFlags.Static|BindingFlags.NonPublic); var cachedData = fInfo.GetValue(null); fInfo = cachedData.GetType().GetField("m_localTimeZone", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); fInfo.SetValue(cachedData, tz);
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda