Main Content

日付と時刻の算術演算

次の例では、日付と時刻の値の加減算を行って、将来や過去の日付および経過期間を正確な単位またはカレンダー単位で計算する方法を示します。加減乗除の演算子は、他の MATLAB® データ型に対して使用するのと同じ方法で、日付と時刻の配列に対して使用できます。ただし、日付と時刻に固有の動作がいくつかあります。

datetime 配列への期間の加算と減算

datetime スカラーを作成します。既定では、datetime 配列はタイム ゾーンに関連付けられていません。

t1 = datetime('now')
t1 = datetime
   03-Aug-2023 21:00:27

時間のシーケンスを加算して、将来の時点を見つけます。

t2 = t1 + hours(1:3)
t2 = 1x3 datetime
   03-Aug-2023 22:00:27   03-Aug-2023 23:00:27   04-Aug-2023 00:00:27

t2 の各 datetime 値のペアの間の差が 1 時間であることを確認します。

dt = diff(t2)
dt = 1x2 duration
   01:00:00   01:00:00

diff は、正確な時、分および秒数で、duration を返します。

datetime から分のシーケンスを減算して、過去の時点を見つけます。

t2 = t1 - minutes(20:10:40)
t2 = 1x3 datetime
   03-Aug-2023 20:40:27   03-Aug-2023 20:30:27   03-Aug-2023 20:20:27

datetime 配列に数値配列を加算します。MATLAB は、数値配列内の各値を、厳密な 1 日 (24 時間) の日数として処理します。

t2 = t1 + [1:3]
t2 = 1x3 datetime
   04-Aug-2023 21:00:27   05-Aug-2023 21:00:27   06-Aug-2023 21:00:27

タイムゾーンのある datetime への加算

異なる datetime 値を処理する場合または夏時間の変更を考慮する場合は、タイム ゾーンに関連付けられた datetime 配列を処理します。ニューヨークの 2014 年 3 月 8 日を表す datetime スカラーを作成します。

t1 = datetime(2014,3,8,0,0,0,'TimeZone','America/New_York')
t1 = datetime
   08-Mar-2014

固定長 (24 時間) の日のシーケンスを加算して、将来の時点を見つけます。

t2 = t1 + days(0:2)
t2 = 1x3 datetime
   08-Mar-2014 00:00:00   09-Mar-2014 00:00:00   10-Mar-2014 01:00:00

夏時間へのシフトが 2014 年 3 月 9 日に起きるため、t2 の 3 番目の datetime は午前 0 時にはなりません。

t2 の各 datetime 値のペアの間の差が 24 時間であることを確認します。

dt = diff(t2)
dt = 1x2 duration
   24:00:00   24:00:00

関数 yearshoursminutes および seconds の出力を加算することによって、それぞれ年、時、分および秒など、他の単位で固定長の期間を加算できます。

夏時間の変更を考慮するには、期間ではなくカレンダー期間を処理します。カレンダー期間は、datetime 値への加減算を行うときに夏時間へのシフトを考慮します。

t1 にカレンダー日数を加算します。

t3 = t1 + caldays(0:2)
t3 = 1x3 datetime
   08-Mar-2014   09-Mar-2014   10-Mar-2014

3 月 9 日に起きた夏時間へのシフトにより、t3 内の各 datetime 値のペアの間の差が、常に 24 時間ではないことを確認します。

dt = diff(t3)
dt = 1x2 duration
   24:00:00   23:00:00

カレンダー期間の datetime 配列への加算

2014 年 1 月 31 日に、いくつかのカレンダー月を加算します。

t1 = datetime(2014,1,31)
t1 = datetime
   31-Jan-2014

t2 = t1 + calmonths(1:4)
t2 = 1x4 datetime
   28-Feb-2014   31-Mar-2014   30-Apr-2014   31-May-2014

t2 の各 datetime は、各月の最後の日になります。

関数 caldiff を使用して、t2 の各 datetime 値のペア間の差を、カレンダー日数で計算します。

dt = caldiff(t2,'days')
dt = 1x3 calendarDuration
   31d   30d   31d

月の日数は月によって異なるため、dt の連続する datetime 値のペア間の日数は常に同じではありません。

2014 年 1 月 31 日に、いくつかのカレンダー年を加算します。

t2 = t1 + calyears(0:4)
t2 = 1x5 datetime
   31-Jan-2014   31-Jan-2015   31-Jan-2016   31-Jan-2017   31-Jan-2018

関数 caldiff を使用して、t2 の各 datetime 値のペア間の差を、カレンダー日数で計算します。

dt = caldiff(t2,'days')
dt = 1x4 calendarDuration
   365d   365d   366d   365d

2016 年はうるう年で 366 日あるため、dt の連続する datetime 値のペア間の日数は常に同じではありません。

関数 calquarterscalweeks および caldays を使用して、カレンダー四半期、カレンダー週またはカレンダー日の配列を作成し、datetime 配列に対して加減算を行うことができます。

カレンダー期間の加算は可換的ではありません。複数の calendarDuration 配列を datetime に加算すると、MATLAB ではコマンドに表示された順に加算されます。

2014 年 1 月 31 日に 3 カレンダー月を加算してから 30 カレンダー日を加算します。

t2 = datetime(2014,1,31) + calmonths(3) + caldays(30)
t2 = datetime
   30-May-2014

同じ日付に、最初に 30 カレンダー日を加算してから 3 カレンダー月を加算します。datetime にカレンダー期間を加算するとき、加算される日数は元の日付に依存するため、結果は同じではありません。

t2 = datetime(2014,1,31) + caldays(30) + calmonths(3)
t2 = datetime
   02-Jun-2014

カレンダー期間の算術演算

2 つのカレンダー期間を作成し、その合計を確認します。

d1 = calyears(1) + calmonths(2) + caldays(20)
d1 = calendarDuration
   1y 2mo 20d

d2 = calmonths(11) + caldays(23)
d2 = calendarDuration
   11mo 23d

d = d1 + d2
d = calendarDuration
   2y 1mo 43d

2 つ以上のカレンダー期間を合計する場合、12 を超える月数は年数に繰り上げられます。しかし、月内の日数は月によって異なるため、大きい数字の日数は月数には繰り上げられません。

d に 2 を乗算して増加させます。カレンダー期間は整数でなければならないため、整数値以外を乗算することはできません。

2*d
ans = calendarDuration
   4y 2mo 86d

経過時間の正確な単位での計算

ある datetime 配列をもう 1 つの配列から減算して、時、分および秒の正確な数字で経過時間を計算します。

datetime 値のシーケンスと前の日の開始との間の時間の正確な長さを見つけます。

t2 = datetime('now') + caldays(1:3)
t2 = 1x3 datetime
   04-Aug-2023 21:00:28   05-Aug-2023 21:00:28   06-Aug-2023 21:00:28

t1 = datetime('yesterday')
t1 = datetime
   02-Aug-2023

dt = t2 - t1
dt = 1x3 duration
    69:00:28    93:00:28   117:00:28

whos dt
  Name      Size            Bytes  Class       Attributes

  dt        1x3                40  duration              

dt は、時:分:秒の形式の期間を含みます。

dtFormat プロパティを変更することによって、日数の単位で経過期間を表示します。

dt.Format = 'd'
dt = 1x3 duration
   2.8753 days   3.8753 days   4.8753 days

dt に 1.2 を乗算して、duration 値を拡大します。期間は正確な長さをもっているため、小数値による乗算および除算が可能です。

dt2 = 1.2*dt
dt2 = 1x3 duration
   3.4504 days   4.6504 days   5.8504 days

カレンダー単位の経過時間の計算

関数 between を使用して、2 つの日付間で経過するカレンダー年、月および日数を見つけます。

t1 = datetime('today')
t1 = datetime
   03-Aug-2023

t2 = t1 + calmonths(0:2) + caldays(4)
t2 = 1x3 datetime
   07-Aug-2023   07-Sep-2023   07-Oct-2023

dt = between(t1,t2)
dt = 1x3 calendarDuration
       4d   1mo 4d   2mo 4d

参考

| |