Prüfen Sie, ob DateTime in einem bestimmten Bereich liegt

  • Sie müssen prüfen, ob DateTime in einem bestimmten Bereich liegt. Ich denke, ich muss das erste und letzte Datum der Sommerzeit in YEAR in diesem Jahr berechnen.

    Wie würde ich das Datum "Sonntag der 2. Woche vom März" angeben?

     From 1/1/2007 12:00:00 AM to 12/31/9999 12:00:00 AM
      Begins at 2:00 AM on Sunday of week 2 of March
      Ends at 2:00 AM on Sunday of week 1 of November
     

    Zum Beispiel muss ich überprüfen, ob der 11/21/2011 zwischen Sonntag der Woche 2 im März und Sonntag der Woche vom 1. November - Antwort sollte NEIN sein.

    Wenn ich den 08.08.2011 bestanden habe, sollte die Antwort ja sein.

    Grundsätzlich muss ich eine Funktion schreiben, um zu prüfen, ob mein Datum zu Sommerzeit gehört. Meine einzige Idee ist bisher, Loops zu schreiben, um beispielsweise die zweite Woche zu finden.

    Ich würde also vom ersten Tag im März bis zum zweiten Mal am Sonntag eine Schleife machen. Dasselbe würde ich vom 1. November an bis zum ersten Mal am Sonntag um jeweils 1 Tage verlängern.

    Mit anderen Worten, ich brauche eine Funktion, um zu überprüfen, ob Eingangsdaten eingegeben werden Sommerzeit. Zeitraum, der durch die obige Einschränkung definiert ist.

    P.S. Ich kann TimeZoneInfo nicht verwenden, da es in Silverlight P.P.S ist. Ich kann DateTime.IsDaylightSavingsTime nicht verwenden, da ich keine Zeit mit der Art "local"

    habe
    22 November 2011
    katit
5 answers
  • Versuchen Sie es mit der DateTime.IsDaylightSavingsTime -Methode.

    Wenn Ihre Datumsangaben UTC sind, können Sie in local konvertieren und dann IsDaylightSavingsTime() verwenden:

     var localDateTime = utcDateTime.ToLocalTime();
    var isDaylightSavings = localDateTime.IsDaylightSavingsTime();
     
    22 November 2011
    Jeff Ogatatwamn
  • Ich habe diese kleine Methode gerade ausgeführt, überprüfe sie und lass es mich wissen:

         bool IsInDaylightSavingsTime(DateTime date)
        {
            // get second sunday in march
            DateTime _tempDateMar = new DateTime(date.Year, 3, 1);
            int secondSunDayInMar = (8 - (int)_tempDateMar.DayOfWeek) + 7;
            _tempDateMar = new DateTime(date.Year, 3, secondSunDayInMar, 2, 0, 0);
    
            //get first sunday in november
            DateTime _tempDateNov = new DateTime(date.Year, 11, 1);
            int firstSunDayInNov = (8 - (int)_tempDateNov.DayOfWeek);
            _tempDateNov = new DateTime(date.Year, 11, firstSunDayInNov, 2, 0, 0);
    
            return (date >= _tempDateMar && date <= _tempDateNov);
        }
     
    22 November 2011
  • Dies könnte für Sie ausreichend sein: http: //www.codeproject. de / KB / datetime / TimePeriod.aspx

    22 November 2011
    unruledboy
  • Sie könnten einen Web-Service schreiben, der eine utc-datetime und eine Zeitzonen-ID benötigt und die Informationen zurückgibt, die Sie benötigen - z. B. IsDaylightSavings. Da Sie Zugriff auf das vollständige .net-Framework haben, können Sie die Timezone-Funktionalität nutzen, die immer auf dem neuesten Stand sein sollte, solange die Systemupdates installiert sind.

    22 November 2011
    AndrewS
  • Das Arbeiten mit mehreren Zeitzonen ist eine schwierige Sache. Im Allgemeinen ist dieses Problem nicht durch Einzelbemühungen zu lösen (es sei denn, Sie widmen sich Ihrem Leben). Wenn Sie beispielsweise 2-3 Zeitzonen unterstützen müssen, ist es in Ordnung, Ihre Schleifenlösung zu verwenden (AFAIK ist dies die einzige Möglichkeit, die Woche in .NET zu berechnen).

    habe ich verwendet Dieser Code zur Berechnung der Woche für die Sommerzeitumstellung:

     /// <summary>
    /// Utility method for GetDaylightChanges. 
    /// Searches for date defined by TransitionTime structure.
    /// </summary>
    /// <param name="year">Year for which create date.</param>
    /// <param name="transitionTime">TimeZoneInfo.TransitionTime which to use for date calculation.</param>
    /// <returns>Transition time.</returns>
    private static DateTime DateTimeByWeek(int year, TimeZoneInfo.TransitionTime transitionTime)
    {
        const int DaysInWeek = 7;
    
        // get year and month
        DateTime switchDate = new DateTime(year, transitionTime.Month, 1);
    
        // move to switch day of week
        while (switchDate.DayOfWeek != transitionTime.DayOfWeek)
        {
            switchDate = switchDate.AddDays(1);
        }
    
        // move to week
        switchDate = switchDate.AddDays((transitionTime.Week - 1) * DaysInWeek);
    
        // add time
        switchDate = switchDate.AddHours(transitionTime.TimeOfDay.Hour);
    
        // sometimes it gives us next month...
        if (switchDate.Month != transitionTime.Month)
        {
            // ...then use previous (last) week
            return switchDate.AddDays(-DaysInWeek);
        }
    
        return switchDate;
    }
     

    Offensichtlich brauchen Sie keine Zeit und müssen ersetzt werden TransitionTime mit einigen benutzerdefinierten Parametern.

    22 November 2011
    Petr Abdulin