Main Content

日付ベクトルと文字列の繰り上げ

メモ

関数 datenum と関数 datestr は推奨されません。代わりに、datetime 値を使用して、シリアル日付値や日付ベクトルではなく時点を表します。これらの数値表現とは異なり、datetime 値は人間が判読可能な形式で表示され、タイム ゾーンとうるう秒を考慮するプロパティを持ちます。datetime 値を使用するためのコードの更新の詳細については、シリアル日付値と日付文字列の推奨されないインスタンスの置き換えを参照してください。

ある要素が通常の範囲外である場合、MATLAB® ではその日付ベクトル要素と直前の要素の両方が調整されます。たとえば、分の要素が 70 である場合、MATLAB では時間の要素の値が 1 増やされて、分の要素の値が 10 に設定されます。分の要素が -15 である場合、MATLAB では時間の要素の値が 1 減らされて、分の要素の値が 45 に設定されます。

この例では、月要素に値 22 があります。MATLAB は年の値を 2022 にインクリメントし、月を 10 月に設定します。関数 datetime と関数 datestr はどちらも、通常の範囲外の月要素を調整します。ただし、datestr は推奨されません。

d1 = datetime([2021 22 03 00 00 00])
d1 = 

  datetime

   03-Oct-2022
d2 = datestr([2021 22 03 00 00 00])
d2 =

    '03-Oct-2022'

これらの関数では、月のコンポーネントではないどのコンポーネントでも同じように負の値が考慮されます。たとえば、これらの呼び出しはどちらも 7 (7 月) として指定されている月と -5 として指定されている日数を含む入力を取ります。どちらの関数も、6 月の最終日 (6 月 30 日) から 5 日を差し引いて、2022 年 6 月 25 日を返します。

d1 = datetime([2022 07 -05 00 00 00])
d1 = 

  datetime

   25-Jun-2022
d2 = datestr([2022 07 -05 00 00 00])
d2 =

    '25-Jun-2022'

月のコンポーネントが 1 未満の数値である場合、このルールは適用されません。その場合は、datetimedatestr とで動作が異なります。関数 datetime は、年コンポーネントの開始から月のコンポーネントを差し引くため、出力の日付は前年の日付になります。たとえば、年が 2022 の入力を持つ以下の呼び出しでは、月のコンポーネントが -5 であるため、2021 年 7 月 3 日が返されます。

d1 = datetime([2022 -5 3 0 0 0])
d1 = 

  datetime

   03-Jul-2021

一方、datestr では、出力の月のコンポーネントは 2022 年 1 月に設定されます。入力の月のコンポーネントが 1 未満の場合、datestr ではその値が 1 として処理されます。

d2 = datestr([2022 -5 3 0 0 0])
d2 =

    '03-Jan-2022'

値の繰り上げは、日付と時刻を表すテキストを変換する関数 datenum を使用する場合にも適用されます。たとえば、datenum は、2022 年 10 月 3 日と 2022 年 9 月 33 日は同じ日と解釈し、同じシリアル日付値を返します。ただし、この場合も datenum は推奨されません。

d = datenum("2022-10-03")
d =

      738797
d = datenum("2022-09-33")
d =

      738797

一方、関数 datetime は、2022 年 9 月 33 日を表すテキストを解釈しません。通常の範囲外の日付と時刻を指定するテキストの値を繰り上げようとしません。代わりに、結果はエラーになります。

d = datetime("2022-10-03")
d = 

  datetime

   03-Oct-2022
d = datetime("2022-09-33")
Error using datetime
Could not recognize the date/time format of '2022-09-33'. You can specify a format using the 'InputFormat'
parameter. If the date/time text contains day, month, or time zone names in a language foreign to the
'en_US' locale, those might not be recognized. You can specify a different locale using the 'Locale'
parameter.