Frage

Da mehrere Zeitbereiche, ich brauche den Zeitbereich, um herauszufinden, hat die aktuelle Zeit gehört. Wie kann ich dies tun, effizienter das Datum Teil des Datetime zu ignorieren.

TimeSlot.Overlaps(DateTime currTime) Methode sollte das Datum Teil ignorieren und nur die Zeit einen Teil davon entsprechen.

War es hilfreich?

Lösung

public class TimeSlot
{
    public DateTime StartTime { get; set; }
    public DateTime EndTime { get; set; }


    public bool Overlaps(DateTime compareTime)
    {
        return Overlaps(new TimeSlot() { StartTime = compareTime, EndTime = compareTime });
    }

    public bool Overlaps(TimeSlot compareSlot)
    {
        return (
            (compareSlot.StartTime.TimeOfDay >= StartTime.TimeOfDay && compareSlot.StartTime.TimeOfDay < EndTime.TimeOfDay) ||
            (compareSlot.EndTime.TimeOfDay <= EndTime.TimeOfDay && compareSlot.EndTime.TimeOfDay > StartTime.TimeOfDay) ||
            (compareSlot.StartTime.TimeOfDay <= StartTime.TimeOfDay && compareSlot.EndTime.TimeOfDay >= EndTime.TimeOfDay)
        );
    }
}

Andere Tipps

würde ich die datediff Methode in .NET verwenden. Sie können Sie einen Teil des Datum angeben, welche wünschen als das Intervall verwenden. Also, zunächst möchten Sie wahrscheinlich zu testen, ob sie innerhalb des gleichen Tages sind. Geben Sie Tag als Intervall. Das Ergebnis sollte Null sein. Dann können Sie finden Stunden, Minuten, Sekunden, etc. Ich bin mir ziemlich sicher, dass es Ihnen die Bruchteile gibt: 1 Stunde, 45 Minuten im Vergleich zu 1,75 Stunden 105 min. Dann vergleicht nur die Start- und End Datetimes in Ihrer Timeslot-Klasse (die ich vermute, ist die Gewohnheit?)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top