es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Método TimeZoneInfo.GetSystemTimeZones: ¿incluye horario de verano, etc.?

Estoy haciendo esto:

var tzs = TimeZoneInfo.GetSystemTimeZones();
TimezoneList = tzs.Select(tz => new SelectListItem()
{
    Text = tz.DisplayName,
    Value = tz.Id
}).ToArray();

para obtener información de la zona horaria.

Funciona bien, aunque necesitamos que sea sensible al horario de verano (por ejemplo, British Summer Time en lugar de UTC o Eastern Time frente a Eastern Daylight Time). ¿Alguien sabe cómo hacerlo con este método, o conoce un método diferente para hacerlo?

Gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para asegurarse de ser sensible al horario de verano, puede utilizar el método TimeZoneInfo.ConvertTimeFromUtc para convertir la hora UTC a la hora local de una zona horaria específica, teniendo en cuenta el horario de verano. Aquí tienes un ejemplo de cómo puedes modificar el código anterior para incluir el horario de verano:

    var tzs = TimeZoneInfo.GetSystemTimeZones();
    TimezoneList = tzs.Select(tz => new SelectListItem()
    {
        Text = tz.DisplayName,
        Value = tz.Id
    })
    .Select(tz => new SelectListItem()
    {
        Text = $"{tz.Text} ({TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById(tz.Value)).ToString("G")})",
        Value = tz.Value
    })
    .ToArray();
    

    En este código modificado, se utiliza TimeZoneInfo.ConvertTimeFromUtc para convertir la hora UTC actual (obtenida con DateTime.UtcNow) a la hora local de cada zona horaria (utilizando TimeZoneInfo.FindSystemTimeZoneById(tz.Value)). La hora local resultante (que incluye el horario de verano) se incluye en el texto de visualización de cada zona horaria. Esto asegurará que tu código tenga en cuenta el horario de verano al mostrar la lista de zonas horarias.

Comments are closed.