webentwicklung-frage-antwort-db.com.de

Prüfen Sie, ob die Sommerzeit gilt?

Wie prüfe ich, ob in Dänemark die Sommerzeit gilt? Wenn ja, dann addiere 1 Stunde zu meinen Daten, sonst nicht? Ich habe eine XML-Datei:

<day = "1"
month = "5"
sunrise ="06:30"
sunset ="21:30"
/>
25
Megaoctane

Sie müssen diese XML-Datei in DateTime konvertieren und dann die TimeZoneInfo-Klasse verwenden.

Wenn Dänemark Ihre Ortszeit ist:

DateTime thisTime = DateTime.Now;
bool isDaylight = TimeZoneInfo.Local.IsDaylightSavingTime(thisTime);

Ansonsten brauchen Sie Dänemark TimeZone:

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

Wenn ich wie oben codiert habe - für New York habe ich im Debugger festgestellt, dass die Uhrzeit richtig eingestellt war (einschließlich 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;

    }
7
Meir Schreiber

Sie können TimeZoneInfo.IsDaylightSavingTime verwenden

DateTime theDate = new DateTime(2012, 5, 1); // may 1st
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
bool isCurrentlyDaylightSavings = tzi.IsDaylightSavingTime(theDate);
6
Matthew

dies ist meine kurze Lösung, die in allen Zeitzonen verwendet werden kann:

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

Sie müssen zwei Dinge tun: 

  1. aufruf IsAmbiguous
  2. Listenelement 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

Wichtig

myDateTime.IsDaylightSavingTime gibt den richtigen Wert zurück ... aber ... er ist mindestens auf die Stunde des Tages genau, es reicht nicht aus, nur das Datum alleine zu übergeben.

Zum Beispiel wird in diesem Jahr (2019) am 10.03.19 02:00:00, das als myDateTime vergangen ist, false zurückgegeben, am 10.03.19 03:00:00 hingegen true.

0
HellFyr

Hier ist ein generischer Test und ich freue mich, korrigiert zu werden, wenn meine Mathematik falsch ist. In meinem Fall musste ich nur den GMT-Offset für die Zeitzone abrufen, unabhängig davon, wo auf der Welt er sich befand.

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

Ich habe einfach die aktuelle Uhrzeit gefunden und wenn es in der Day Light Savings-Periode war, wurde der GMT-Offset um +1 erhöht.

Dies funktioniert mit Visual Studio Express 2013.

0
timv