日付ベクトルと文字列の繰り上げ
メモ
関数 datenum
と関数 datestr
は推奨されません。代わりに、datetime
値を使用して、シリアル日付値や日付ベクトルではなく時点を表します。これらの数値表現とは異なり、datetime
値は人間が判読可能な形式で表示され、タイム ゾーンとうるう秒を考慮するプロパティを持ちます。datetime
値を使用するためのコードの更新の詳細については、Replace Discouraged Instances of Serial Date Numbers and Date Stringsを参照してください。
ある要素が通常の範囲外である場合、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
未満の数値である場合、このルールは適用されません。その場合は、datetime
と datestr
とで動作が異なります。関数 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.