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"
/>
21
demandé sur Megaoctane 2012-05-19 17:43:53

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);
53
répondu Eugene 2012-05-19 14:24:11

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;

    }
6
répondu Meir Schreiber 2018-03-06 08:45:32

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);
4
répondu Matthew 2012-05-19 14:24:02

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.

0
répondu timv 2014-03-13 00:21:22

, Vous devez faire deux choses:

  1. appel IsAmbiguous
  2. É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

0
répondu B.W 2017-04-27 21:45:52