web-dev-qa-db-fra.com

Vérifiez si l'heure d'été est en vigueur?

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"
/>
25
Megaoctane

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);
56
Eugene

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;

    }
7
Meir Schreiber

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);
6
Matthew

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;
}
0
Marc

Vous devez faire deux choses: 

  1. appelez IsAmbiguous
  2. Elément de la 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
B.W

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.

0
timv