日付と時刻の比較
この例では、関係演算子と比較関数を使用して日付、時刻、および期間を比較する方法を示します。datetime
および duration
データ型は日付と時刻を数量として表すので、数値配列の比較に使用するのと同じ関係演算子を使用できます。ただし、データ型によって比較の意味は若干異なります。
datetime
値は、別のdatetime
値の前、同時、または後に発生する場合があります。duration
値は、別のduration
値と比較して時間の長さが短い場合もあれば、同じ場合もあれば、長い場合もあります。
calendarDuration
データ型は関係演算子を使用した比較をサポートしていません。カレンダー単位は必ずしも固定された時間の長さを表すわけではありません。
2 つの datetime
配列を比較できます。また、2 つの duration
配列を比較できます。関係演算子は要素単位の比較を実行するため、配列のサイズに互換性がなければなりません。最も簡単なケースでは、2 つの配列が同じサイズであるか、一方がスカラーです。詳細については、基本的な演算で互換性のある配列サイズを参照してください。
日付と時刻はテキストで表すこともできます。一方、期間はテキストおよび数値で表すこともできます。したがって、datetime
配列をテキストと比較したり、duration
配列をテキストおよび数値と比較したりできます。関係演算子は、演算を実行する前にテキストおよび数値を正しいデータ型に変換します。
datetime
配列と duration
配列を比較することはできません。ただし、datetime
配列の成分を数値または duration
配列と比較することはできます。
datetime
値の比較
datetime
配列を作成します。日付と時刻を表すテキストを変換するには、関数 datetime
を使用します。
d1 = datetime("2022-06-05 11:37:05")
d1 = datetime
05-Jun-2022 11:37:05
datetime
の成分 (年数、月数、日数、時間数、分数、および秒数) を表す入力数値配列を変換して、別の datetime
配列を作成します。
d2 = datetime(2022,2:4:10,15,12,0,0)
d2 = 1x3 datetime
15-Feb-2022 12:00:00 15-Jun-2022 12:00:00 15-Oct-2022 12:00:00
2 つの datetime
配列を比較します。結果は、d2
のどの要素が d1
の後なのかを示します。
tf = d2 > d1
tf = 1x3 logical array
0 1 1
一致する要素のみが含まれた datetime
配列を作成するには、tf
を使用して d2
へのインデックス付けを行います。
afterd1 = d2(tf)
afterd1 = 1x2 datetime
15-Jun-2022 12:00:00 15-Oct-2022 12:00:00
テキストと datetime
値
関数 datetime
によって認識される形式で日付と時刻を表すテキストがある場合は、そのテキストを datetime
配列と比較できます。比較により、テキストが暗黙的に変換されます。
たとえば、d2
を、2022 年 6 月 1 日を表す string と比較します。(string が日付のみを示している場合、datetime
への暗黙的な変換により、時刻が午前 0 時に設定されます。)d2
の最初の要素は 6 月 1 日より前です。
tf = d2 >= "2022-06-01"
tf = 1x3 logical array
0 1 1
afterJune1 = d2(tf)
afterJune1 = 1x2 datetime
15-Jun-2022 12:00:00 15-Oct-2022 12:00:00
数値と datetime
配列の成分
datetime
データ型では、datetime
値の成分にアクセスできます。各成分にアクセスするには、関数 year
、quarter
、month
、day
、hour
、minute
、および second
を使用します。これらの関数では数値が返されるため、各成分を数値または duration
値と比較できます。
たとえば、datetime
配列 d2
を表示します。次に、その月成分を表示します。
d2
d2 = 1x3 datetime
15-Feb-2022 12:00:00 15-Jun-2022 12:00:00 15-Oct-2022 12:00:00
m = month(d2)
m = 1×3
2 6 10
月成分にアクセスするもう 1 つの方法として、d2
の Month
プロパティを使用できます。datetime
の成分には、Year
、Month
、Day
、Hour
、Minute
、および Second
の各プロパティによってアクセスできます。
m = d2.Month
m = 1×3
2 6 10
6 月より前の d2
の要素を検出するために、d2
を 6 月に対応する数値と比較します。次に d2
にインデックスを付けます。
tf = month(d2) < 6
tf = 1x3 logical array
1 0 0
beforeJune = d2(tf)
beforeJune = datetime
15-Feb-2022 12:00:00
duration
配列の比較
duration
配列を作成します。hh:mm:ss
形式のテキストを変換する場合は、関数 duration
を使用します。
t1 = duration("03:37:12")
t1 = duration
03:37:12
時間数、分数、および秒数を表す入力数値配列を変換して、別の duration
配列を作成します。
t2 = duration(0:2:6,30,0)
t2 = 1x4 duration
00:30:00 02:30:00 04:30:00 06:30:00
2 つの duration
配列を比較します。結果では、t2
のどの要素が t1
より長いのかが示されます。
tf = t2 > t1
tf = 1x4 logical array
0 0 1 1
一致する要素のみが含まれた新しい duration
配列を作成するには、tf
を使用して t2
へのインデックス付けを行います。
longerThanT1 = t2(tf)
longerThanT1 = 1x2 duration
04:30:00 06:30:00
テキストと duration
値
関数 duration
によって認識される形式で時間の長さを表すテキストがある場合は、そのテキストを duration
配列と比較できます。比較により、テキストが暗黙的に変換されます。
たとえば、t2
を、2 時間 5 分を表す string と比較します。t2
の最初の要素の方が短くなっています。
tf = t2 >= "02:05:00"
tf = 1x4 logical array
0 1 1 1
longerThan205 = t2(tf)
longerThan205 = 1x3 duration
02:30:00 04:30:00 06:30:00
数値と duration
配列
数値配列を duration
配列と比較できます。比較では、数値は固定長 (24 時間) の日数として扱われます。
t2
の要素を 1 日と比較します。すべての要素が短くなっています。
tf = t2 < 1
tf = 1x4 logical array
1 1 1 1
t2(tf)
ans = 1x4 duration
00:30:00 02:30:00 04:30:00 06:30:00
t2
の要素を 1 時間と比較します。t2
の最初の要素のみが短くなっています。
tf = t2 < 1/24
tf = 1x4 logical array
1 0 0 0
t2(tf)
ans = duration
00:30:00
タイム ゾーンが異なる datetime
配列の比較
ロサンゼルスの 2022 年 10 月 1 日午後 4 時とニューヨークの 2022 年 10 月 1 日午後 5 時を表す datetime
値を作成します。2 つの都市のタイム ゾーンは異なっています。
名前と値の引数 TimeZone
を指定して、タイム ゾーンをもつ datetime
配列を作成できます。これらの値を表示する際にタイム ゾーンを表示するには、名前と値の引数 Format
を指定します。なお、入力テキストの形式とは異なる datetime
表示形式を指定できます。
LAtime = datetime("2022-10-01 16:00:00", ... "TimeZone","America/Los_Angeles",... "Format","dd-MMM-yyyy hh:mm:ss a z")
LAtime = datetime
01-Oct-2022 04:00:00 PM PDT
NYtime = datetime("2022-10-01 17:00:00", ... "TimeZone","America/New_York",... "Format","dd-MMM-yyyy hh:mm:ss a z")
NYtime = datetime
01-Oct-2022 05:00:00 PM EDT
2 つの都市の時刻を比較します。同じ日において、ロサンゼルスの午後 4 時はニューヨークの午後 5 時より後に起こります。タイム ゾーンを指定した場合、datetime
配列の比較では、各配列のタイム ゾーン情報が考慮されます。
tf = NYtime < LAtime
tf = logical
1
==
演算子を使用して、同じクロック時間をもつ 2 つの datetime
値を比較します。タイム ゾーンが異なるため、2 つの値は等しくありません。
NYtime4 = datetime("2022-10-01 16:00:00", ... "TimeZone","America/New_York",... "Format","dd-MMM-yyyy hh:mm:ss a z")
NYtime4 = datetime
01-Oct-2022 04:00:00 PM EDT
tf = NYtime4 == LAtime
tf = logical
0
タイムゾーンのある datetime
配列とタイムゾーンのない datetime
配列を比較することはできません。1 つの datetime
配列のみにタイム ゾーンがある場合、比較に十分な情報がありません。
他の関数を使用した日付と時刻の比較
MATLAB には日付と時刻の比較用のその他の関数が用意されています。
isbetween
—datetime
またはduration
配列の要素が間隔内にあるかどうかを判別します。isdst
—datetime
配列の要素が夏時間期間中かどうかを判別します。isweekend
—datetime
配列の要素が週末 (土曜日と日曜日) かどうかを判別します。ismissing
— 配列の要素に欠損値 (datetime
配列の場合はNaT
、duration
配列の場合はNaN
) があるかどうかを判別します。
datetime
配列または duration
配列に対して集合演算を実行することもできます。
union
— 2 つのdatetime
配列または 2 つのduration
配列の和集合intersect
— 2 つのdatetime
配列または 2 つのduration
配列の積集合ismember
— 2 番目のdatetime
配列またはduration
配列の要素である 1 番目のdatetime
配列またはduration
配列の要素setdiff
— 2 つのdatetime
配列または 2 つのduration
配列の差setxor
— 2 つのdatetime
配列または 2 つのduration
配列の排他的 OR
たとえば、datetime
配列の要素が 2022 年の第 1 四半期内かどうかを判別します。(第 1 四半期の終わりは、第 2 四半期の最初の瞬間と同じです。)
start1Q = datetime("2022-01-01"); end1Q = datetime("2022-04-01"); d = datetime(2022,2:4:10,15,12,0,0)
d = 1x3 datetime
15-Feb-2022 12:00:00 15-Jun-2022 12:00:00 15-Oct-2022 12:00:00
d
のどの要素が最初の四半期の開始と終了の間にあるかを判別するには、isbetween
を使用します。start1Q
から end1Q
までの時間間隔を右開区間として指定します。
tf = isbetween(d,start1Q,end1Q,"openright")
tf = 1x3 logical array
1 0 0
isbetween
を使用して右開区間を指定するのは、次の式と等価です。この間隔には、2022 年 1 月 1 日が開始した瞬間から、2022 年 4 月 1 日の開始までのすべての瞬間が含まれますが、2022 年 4 月 1 日が開始した瞬間は含まれません。次の期間の開始を使用して期間の終了を指定する場合、その期間は右開区間とみなします。
tf = (start1Q <= d & d < end1Q)
tf = 1x3 logical array
1 0 0
第 1 四半期内の d
の要素を表示します。
d(tf)
ans = datetime
15-Feb-2022 12:00:00
TimeZone
プロパティを設定して、d
のタイム ゾーンを指定します。次に、要素が夏時間期間内かどうかを判別します。
d.TimeZone = "America/New_York";
isdst(d)
ans = 1x3 logical array
0 1 1
要素が週末かどうかを判別します。
isweekend(d)
ans = 1x3 logical array
0 0 1
一致する要素の曜日を表示するには、関数 day
を使用します。
weekendDays = d(isweekend(d))
weekendDays = datetime
15-Oct-2022 12:00:00
day(weekendDays,"name")
ans = 1x1 cell array
{'Saturday'}
参考
datetime
| duration
| isbetween
| isdst
| isweekend
| ismissing
| day
| month