Main Content

日付と時刻のシーケンスの生成

ステップ サイズをもつ端点間の datetime または duration 値のシーケンス

次の例は、コロン (:) 演算子を使用して、等間隔の数値ベクトルを作成するのと同じ方法で、datetime 値または duration 値のシーケンスを生成する方法を示します。

既定のステップ サイズを使用

2013 年 11 月 1 日に開始し、2013 年 11 月 5 日に終了する datetime 値のシーケンスを作成します。既定のステップ サイズは 1 カレンダー日です。

t1 = datetime(2013,11,1,8,0,0);
t2 = datetime(2013,11,5,8,0,0);
t = t1:t2
t = 1x5 datetime
   01-Nov-2013 08:00:00   02-Nov-2013 08:00:00   03-Nov-2013 08:00:00   04-Nov-2013 08:00:00   05-Nov-2013 08:00:00

ステップ サイズの指定

関数 caldays を使用して、ステップ サイズを 2 カレンダー日に指定します。

t = t1:caldays(2):t2
t = 1x3 datetime
   01-Nov-2013 08:00:00   03-Nov-2013 08:00:00   05-Nov-2013 08:00:00

日以外の単位でステップ サイズを指定します。18 時間間隔の datetime 値のシーケンスを作成します。

t = t1:hours(18):t2
t = 1x6 datetime
   01-Nov-2013 08:00:00   02-Nov-2013 02:00:00   02-Nov-2013 20:00:00   03-Nov-2013 14:00:00   04-Nov-2013 08:00:00   05-Nov-2013 02:00:00

関数 yearsdaysminutes および seconds を使用して、他の固定長の日付と時刻の単位で datetime および duration のシーケンスを作成します。0 から 3 分の間で、30 秒ずつインクリメントする duration 値のシーケンスを作成します。

d = 0:seconds(30):minutes(3)
d = 1x7 duration
     0 sec    30 sec    60 sec    90 sec   120 sec   150 sec   180 sec

固定長の期間とカレンダー期間のステップ サイズの比較

t1t2 にタイム ゾーンを割り当てます。America/New_York タイム ゾーンで、t1 は夏時間への変更直前の時刻です。

t1.TimeZone = 'America/New_York';
t2.TimeZone = 'America/New_York';

1 カレンダー日をステップ サイズとしてシーケンスを作成すると、連続する datetime 値の間の差は常に 24 時間というわけではありません。

t = t1:t2;
dt = diff(t)
dt = 1x4 duration
   24:00:00   25:00:00   24:00:00   24:00:00

固定長の 1 日ずつ離れた datetime 値のシーケンスを作成します。

t = t1:days(1):t2
t = 1x5 datetime
   01-Nov-2013 08:00:00   02-Nov-2013 08:00:00   03-Nov-2013 07:00:00   04-Nov-2013 07:00:00   05-Nov-2013 07:00:00

連続する datetime 値の間の差が 24 時間であることを検証します。

dt = diff(t)
dt = 1x4 duration
   24:00:00   24:00:00   24:00:00   24:00:00

整数ステップ サイズ

整数でステップ サイズを指定すると、1 日を 24 時間とする日数と解釈されます。

t = t1:1:t2
t = 1x5 datetime
   01-Nov-2013 08:00:00   02-Nov-2013 08:00:00   03-Nov-2013 07:00:00   04-Nov-2013 07:00:00   05-Nov-2013 07:00:00

期間またはカレンダー期間を加算して日付のシーケンスを作成する

次の例では、期間またはカレンダー期間を datetime に加算して、datetime 値のシーケンスを作成する方法を示します。

2013 年 11 月 1 日午前 8 時を表す datetime スカラーを作成します。

t1 = datetime(2013,11,1,8,0,0);

固定長の時間のシーケンスを datetime に加算します。

t = t1 + hours(0:2)
t = 1x3 datetime
   01-Nov-2013 08:00:00   01-Nov-2013 09:00:00   01-Nov-2013 10:00:00

カレンダー月のシーケンスを datetime に加算します。

t = t1 + calmonths(1:5)
t = 1x5 datetime
   01-Dec-2013 08:00:00   01-Jan-2014 08:00:00   01-Feb-2014 08:00:00   01-Mar-2014 08:00:00   01-Apr-2014 08:00:00

t の各 datetime は、各月の最初の日になります。

t 内の日付が 1 か月ずつ離れていることを検証します。

dt = caldiff(t)
dt = 1x4 calendarDuration
   1mo   1mo   1mo   1mo

各日付の間の日数を調べます。

dt = caldiff(t,'days')
dt = 1x4 calendarDuration
   31d   31d   28d   31d

日付 2014 年 1 月 31 日 にいくつかのカレンダー月を加算して、各月の最終日に当たる日付のシーケンスを作成します。

t = datetime(2014,1,31) + calmonths(0:11)
t = 1x12 datetime
   31-Jan-2014   28-Feb-2014   31-Mar-2014   30-Apr-2014   31-May-2014   30-Jun-2014   31-Jul-2014   31-Aug-2014   30-Sep-2014   31-Oct-2014   30-Nov-2014   31-Dec-2014

日付または期間のシーケンスの長さと端点の指定

次の例では、関数 linspace を使用して、指定された 2 つの端点間の等間隔の datetime または duration 値を作成します。

2014 年 4 月 14 日と 2014 年 8 月 4 日の間で等間隔の 5 つの日付のシーケンスを作成します。まず、端点を定義します。

A = datetime(2014,04,14);
B = datetime(2014,08,04);

linspace への 3 番目の入力は、端点の間に生成する線形に配置された点の数を指定します。

C = linspace(A,B,5)
C = 1x5 datetime
   14-Apr-2014   12-May-2014   09-Jun-2014   07-Jul-2014   04-Aug-2014

1 時間と 5.5 時間の間に 6 個の等間隔な duration のシーケンスを作成します。

A = duration(1,0,0);
B = duration(5,30,0);
C = linspace(A,B,6)
C = 1x6 duration
   01:00:00   01:54:00   02:48:00   03:42:00   04:36:00   05:30:00

カレンダーの規則を使用する datetime 値のシーケンス

次の例では、関数 dateshift を使用して、各インスタンスがカレンダー単位または時間の単位に関係する規則に従うような、日付と時刻のシーケンスを生成します。たとえば、各 datetime は月の最初、特定の曜日または分の終わりにならなければなりません。シーケンス内の結果の datetime 値は必ずしも等間隔ではありません。

特定の曜日の日付

次の 3 回の月曜日で構成される日付のシーケンスを生成します。まず、今日の日付を定義します。

t1 = datetime('today','Format','dd-MMM-yyyy eee')
t1 = datetime
   12-Feb-2024 Mon

dateshift への最初の入力は必ず、シーケンスを生成する元の datetime 配列です。'dayofweek' を 2 番目の入力として指定し、出力シーケンスの datetime 値が特定の曜日にならなければならないことを示します。曜日は、番号または名前で指定できます。たとえば、月曜日は 2 または 'Monday' として指定できます。

t = dateshift(t1,'dayofweek',2,1:3)
t = 1x3 datetime
   12-Feb-2024 Mon   19-Feb-2024 Mon   26-Feb-2024 Mon

月の最初の日付

2014 年 4 月 1 日に始まる月の最初の日付のシーケンスを生成します。'start'dateshift への 2 番目の入力として指定し、出力シーケンスのすべての datetime 値が特定の時間単位の最初でなければならないことを示します。3 番目の入力引数は、時間単位を定義します。この場合は月です。dateshift への最後の入力は、t1 をシフトする方法を指定する整数値の配列にできます。この場合、0 は現在の月の開始に対応し、4t1 から 4 番目の月の開始に対応します。

t1 = datetime(2014,04,01);
t = dateshift(t1,'start','month',0:4)
t = 1x5 datetime
   01-Apr-2014   01-May-2014   01-Jun-2014   01-Jul-2014   01-Aug-2014

月の最後の日付

2014 年 4 月 1 日に始まる月の最後の日付のシーケンスを生成します。

t1 = datetime(2014,04,01);
t = dateshift(t1,'end','month',0:2)
t = 1x3 datetime
   30-Apr-2014   31-May-2014   30-Jun-2014

各日付の間の日数を調べます。

dt = caldiff(t,'days')
dt = 1x2 calendarDuration
   31d   30d

日付は等間隔ではありません。

日付と時刻のその他の単位

週、日、時など、その他の時間単位を指定できます。

t1 = datetime('now')
t1 = datetime
   12-Feb-2024 23:31:49

t = dateshift(t1,'start','hour',0:4)
t = 1x5 datetime
   12-Feb-2024 23:00:00   13-Feb-2024 00:00:00   13-Feb-2024 01:00:00   13-Feb-2024 02:00:00   13-Feb-2024 03:00:00

過去の日付と時刻

過去の時間に始まる datetime のシーケンスを生成します。dateshift への最後の入力が負の整数の場合、t1 より前の datetime 値に対応します。

t = dateshift(t1,'start','hour',-1:1)
t = 1x3 datetime
   12-Feb-2024 22:00:00   12-Feb-2024 23:00:00   13-Feb-2024 00:00:00

参考

|