Bei der Arbeit mit Datums-/Uhrzeitbereichen kommt es sehr häufig vor, dass Sie einen Bereich verwenden, der am Anfang inklusive und am Ende exklusiv ist. Zum Beispiel:
(using ISO8601 formatting)
Start End
2013-04-29T01:00:00Z - 2013-04-29T02:00:00Z
2013-04-29T02:00:00Z - 2013-04-29T03:00:00Z
Ein Wert liegt im Bereich, wenn er kleiner oder gleich dem Anfang und größer (aber nicht gleich) dem Ende ist. Im obigen Beispiel 02:00
gehört zum zweiten Bereich, nicht zum ersten. Mit anderen Worten:
Start <= value < End
Oder äquivalent,
Start <= value AND End > value
Verwenden Sie in Mathematik die Intervallnotation , wird dies als "halboffenes" Intervall bezeichnet.
[Start, End)
Dies ist immer ein besserer Ansatz als die Idee, einen Wert wie 01:59:59
zu verwenden . Überlegen Sie, ob ich End - Start
subtrahieren würde um eine Dauer zu bekommen. Ich würde erwarten, dass die Antwort eine Stunde ist, nicht 59 Minuten und 59 Sekunden.
Die meisten Beispiele verwenden die Begriffe Start/End
, aber manchmal sehen Sie Begin/End
oder Start/Stop
. Ich persönlich denke, dass die beste Gruppe von Begriffen, die Sie verwenden sollten, wenn Sie einen inklusiven/exklusiven Bereich haben, Start/Until
ist . Es hat den zusätzlichen Vorteil, dass beide Begriffe aus 5 Zeichen bestehen, alphabetisch aufgereiht sind und ausdrücklich angeben, dass das Enddatum exklusiv ist.
Wenn Sie über unterschiedliche Ereignisse sprechen, sollten Sie Ihre Zeiten auch als UTC aufzeichnen, um Verwechslungen mit Zeitzonen zu vermeiden. Dies ist sogar für lokale Anwendungen wichtig, da viele Zeitzonen Sommerzeitumstellungen durchlaufen. Sie möchten nicht, dass die Werte, die Sie in der Datenbank aufzeichnen, mehrdeutig sind. In MySQL können Sie den TIMESTAMP
verwenden Datentyp, um sicherzustellen, dass Werte als UTC gespeichert werden, oder Sie können den DATETIME
verwenden Datentyp, wenn Sie sicher sein können, dass Sie in Ihrem Anwendungscode mit UTC-Werten arbeiten.