Comment vérifier si l'heure d'été au Danemark a pris effet au Danemark, ajoutez 1 heure à vos données, sinon? ?__. J'ai un fichier xml:
<day = "1"
month = "5"
sunrise ="06:30"
sunset ="21:30"
/>
Pensez que vous devez convertir ce fichier 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 réglée correctement (y compris l'heure d'été)
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);
c'est ma solution courte qui peut être utilisée dans tous les fuseaux horaires:
DateTime utcTime = DateTime.Parse("30.10.2018 18:21:34")
DateTime localtime = ConvertUTCToLocalTime(utcTime);
public static DateTime ConvertUTCToLocalTime(DateTime UTCTime)
{
var localZone = TimeZone.CurrentTimeZone;
var offset = localZone.GetUtcOffset(UTCTime);
var localTime = UTCTime.AddHours(offset.Hours);
return localTime;
}
Vous devez faire deux choses:
IsAmbiguous
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
Voici un test générique et heureux d'être corrigé si mes calculs sont incorrects. Dans mon cas, je devais simplement obtenir le décalage horaire GMT pour le fuseau horaire, quel que soit son emplacement 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, s'il était en période de lumière du jour, ajouté +1 à l'offset GMT.
Cela fonctionne avec Visual Studio Express 2013.