c# windows-phone-7 datetime dst

c# - Compruebe si el horario de verano está en vigor?



windows-phone-7 datetime (5)

¿Cómo verificar si en Dinamarca el horario de verano ha entrado en vigencia? De ser así, agregue 1 hora a mis datos, de lo contrario, ¿no? Tengo un archivo xml:

<day = "1" month = "5" sunrise ="06:30" sunset ="21:30" />


Aquí hay una prueba genérica y feliz de ser corregida si mis cálculos son incorrectos. En mi caso, solo necesitaba obtener la compensación GMT para la zona horaria independientemente de dónde se encontraba en el mundo.

int timezone; TimeZoneInfo localZone = TimeZoneInfo.Local; DateTime myTime = DateTime.Now; bool isDayLight = TimeZoneInfo.Local.IsDaylightSavingTime(myTime); if (isDayLight) timezone = Math.Abs(localZone.BaseUtcOffset.Hours) + 1; else timezone = Math.Abs(localZone.BaseUtcOffset.Hours); Debug.WriteLine("timezone is " + timezone);

Simplemente encontré la hora actual y si estaba en el período de ahorro de luz diurna se agregó +1 al desplazamiento GMT.

Esto funciona con Visual Studio Express 2013.


Cuando codifiqué como antes, para Nueva York, encontré en el depurador que la hora estaba configurada correctamente (incluido el horario de verano)

TimeZoneInfo nyTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); DateTime nyTime = GetLocalDateTime(DateTime.UtcNow, nyTimeZone); if (nyTimeZone.IsDaylightSavingTime(nyTime)) nyTime = nyTime.AddHours(1); public static DateTime GetLocalDateTime(DateTime utcDateTime, TimeZoneInfo timeZone) { utcDateTime = DateTime.SpecifyKind(utcDateTime, DateTimeKind.Utc); DateTime time = TimeZoneInfo.ConvertTime(utcDateTime, timeZone); return time; }


Necesitas hacer dos cosas:

  1. llamar a IsAmbiguous
  2. Artículo de lista IsDaylightSavingTime .

if (TimeZoneInfo.Local.IsAmbiguousTime(unclearDate) || TimeZoneInfo.Local.IsDaylightSavingTime(unclearDate)) Console.WriteLine("{0} may be daylight saving time in {1}.", unclearDate, TimeZoneInfo.Local.DisplayName);

https://msdn.microsoft.com/en-us/library/bb460642(v=vs.110).aspx


Piensa que necesitas convertir este xml a DateTime y luego usa la clase TimeZoneInfo.

Si Dinamarca su hora local:

DateTime thisTime = DateTime.Now; bool isDaylight = TimeZoneInfo.Local.IsDaylightSavingTime(thisTime);

De lo contrario, necesitas obtener la Zona horaria de Dinamarca:

DateTime thisTime = DateTime.Now; // get Denmark Standard Time zone - not sure about that TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Denmark Standard Time"); bool isDaylight = tst.IsDaylightSavingTime(thisTime);


Puedes usar TimeZoneInfo.IsDaylightSavingTime

DateTime theDate = new DateTime(2012, 5, 1); // may 1st TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"); bool isCurrentlyDaylightSavings = tzi.IsDaylightSavingTime(theDate);