Vérifiez si l'heure d'été est en vigueur?
Comment vérifier si au Danemark l'heure d'été a pris effet, si oui, puis ajouter 1 heure à mes données, sinon pas? J'ai un fichier xml:
<day = "1"
month = "5"
sunrise ="06:30"
sunset ="21:30"
/>
5 réponses
Pensez que vous avez besoin de convertir ce xml en DateTime, puis utilisez la classe TimeZoneInfo.
Si Danemark votre heure locale:
DateTime thisTime = DateTime.Now;
bool isDaylight = TimeZoneInfo.Local.IsDaylightSavingTime(thisTime);
Sinon, vous devez obtenir le fuseau horaire Danemark:
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);
Quand j'ai codé comme ci-dessus-pour New-York, j'ai trouvé dans le débogueur que l'heure était correctement définie (y compris DST)
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;
}
Vous pouvez utiliser TimeZoneInfo.IsDaylightSavingTime
DateTime theDate = new DateTime(2012, 5, 1); // may 1st
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
bool isCurrentlyDaylightSavings = tzi.IsDaylightSavingTime(theDate);
Voici un test générique et heureux d'être corrigé si mes calculs sont incorrects. Dans mon cas, j'avais juste besoin d'obtenir le décalage GMT pour le fuseau horaire, peu importe où il se trouvait dans le monde.
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);
J'ai simplement trouvé l'heure actuelle et si c'était en période D'économie de lumière de jour ajouté + 1 au décalage GMT.
Cela fonctionne avec Visual Studio Express 2013.
, Vous devez faire deux choses:
- appel
IsAmbiguous
- Élément de liste
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