日時範囲を操作する場合、最初に包括的で最後に排他的な範囲を使用するのが非常に一般的です。例:
(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
値が開始以下で、終了より大きい(ただし等しくない)場合、値は範囲内にあります。上記の例では、02:00
最初の範囲ではなく、2番目の範囲に属します。言い換えれば:
Start <= value < End
または同等に、
Start <= value AND End > value
数学では、区間表記 を使用します 、これは「ハーフオープン」間隔として知られています。
[Start, End)
これは、01:59:59
のような値を使用するという考えよりも常に優れたアプローチです。 。 End - Start
を引くかどうかを検討してください 期間を取得します。答えは59分59秒ではなく、1時間だと思います。
ほとんどの例では、Start/End
という用語を使用しています 、ただし、Begin/End
が表示される場合があります またはStart/Stop
。個人的には、包括的/排他的範囲がある場合に使用するのに最適な用語のセットは、Start/Until
だと思います。 。両方の用語が5文字であり、アルファベット順に並んでおり、終了日が排他的であることを明示的に伝えるという追加の利点があります。
また、個別のイベントについて話している場合は、タイムゾーンの混乱を防ぐために、時刻をUTCとして記録する必要があります。多くのタイムゾーンが夏時間の移行を通過するため、これはローカルアプリケーションにとっても重要です。データベースに記録する値があいまいにならないようにする必要があります。 MySQLでは、TIMESTAMP
を使用できます 値がUTCとして保存されていることを確認するためのデータ型、またはDATETIME
を使用できます アプリケーションコードでUTC値を使用していることが確実な場合は、データ型。