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:
- llamar a
IsAmbiguous
- 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);