solo servidor segundos obtener minutos hora gettimestamp fecha completa actual c# .net windows time

servidor - obtener solo la hora de un datetime c#



DateTime.Now frente a la hora del sistema (1)

Imaginemos que este pequeño programa se ejecuta:

while (true) { Console.WriteLine($"{DateTime.UtcNow} -> {DateTime.Now} tz={TimeZone.CurrentTimeZone.StandardName} / {TimeZoneInfo.Local.StandardName}"); await Task.Delay(TimeSpan.FromSeconds(1)); }

Cuando cambio el huso horario del sistema cuando el programa se está ejecutando, la aplicación no ve el cambio. La zona horaria y la hora son como si la zona horaria no hubiera cambiado.

Para que la aplicación muestre la nueva hora y zona horaria, necesito reiniciar la aplicación.

Si cambio la hora del sistema, el cambio de hora se recoge inmediatamente.

Sería genial si pudieras ayudarme con tres preguntas:

  • esto está documentado en cualquier lugar?
  • ¿Por qué no se retoma el cambio de zona horaria mientras se ejecuta la aplicación?
  • ¿Puedo hacer algo para que la aplicación seleccione los cambios de zona horaria mientras se está ejecutando?

Aquí hay una pequeña captura de pantalla para mostrar la aplicación .NET usando un tiempo diferente al sistema operativo:

Por cierto. En Windows IOT en Raspberry Pi, mi experimento muestra que si reinicio la aplicación, se mostrará la nueva zona horaria, pero la hora ''anterior''. La nueva hora se recogerá después de reiniciar el sistema.


Puede consultar el siguiente link msdn. Establece claramente lo siguiente:

Notas para los llamantes: los datos de la zona horaria local se guardan en la memoria caché después de que CurrentTimeZone se utilice por primera vez para recuperar la información de la zona horaria. Si la zona horaria local del sistema cambia posteriormente, la propiedad CurrentTimeZone no refleja este cambio. Si necesita manejar cambios de zona horaria mientras se ejecuta su aplicación, use la clase TimeZoneInfo y llame a su método TimeZoneInfo.ClearCachedData.

esto está documentado en cualquier lugar? Sí, como se indicó anteriormente.

¿Por qué no se retoma el cambio de zona horaria mientras se ejecuta la aplicación? Porque la información de la zona horaria está en caché.

¿Puedo hacer algo para que la aplicación seleccione los cambios de zona horaria mientras se está ejecutando? Sí, al usar la clase TimeZoneInfo y llamar a su método TimeZoneInfo.ClearCachedData.