シリアル日付値と日付文字列の推奨されないインスタンスの置き換え
R2022b 以降、MATLAB® で日付と時刻を指定する際にシリアル日付値と日付文字列は推奨されません。シリアル日付値は、事前設定された固定の日付からの日数として日付と時刻を表します。日付文字列は、書式設定されたテキストとして日付と時刻を表します。代わりに、datetime
データ型を使用して時点を表し、duration
および calendarDuration
データ型を使用して経過時間を表します。
特に、datetime
データ型にはシリアル日付値よりも多くの利点があります。以下のような利点があります。
出力表示と入力テキスト解析の両方に対応する柔軟な形式
ナノ秒までの精度をもつ秒数の小数部の格納
タイム ゾーン、夏時間およびうるう秒を考慮するためのプロパティ
MATLAB 関数では、datetime
配列に対して同等のサポートが提供されています。つまり、シリアル日付値または日付文字列を入力として受け入れる関数は、datetime
配列も入力として受け入れます。たとえば、関数 plot
はシリアル日付値と datetime
配列の両方を受け入れます。datetime
配列を指定した場合、plot
は、datetime
入力のプロパティを使用して自動的に軸および目盛りラベルを書式設定します。このプロット機能は、datetime
配列で得られる利点のもう 1 つの例です。
このトピックでは、シリアル日付値および日付文字列を MATLAB コードから削除する方法を示します。それらを推奨されるデータ型に変換し、シリアル日付値または日付文字列を使用する関数および構文を置き換え、下位互換性を保ちながら独自の関数を更新できます。
シリアル日付値と日付文字列の変換
シリアル日付値と日付文字列を datetime
配列に変換できます。ほとんどの変換では、datetime
関数が推奨される関数です。
シリアル日付値を変換するには、
datetime
を使用します。d = 738522; d = datetime(d,"ConvertFrom","datenum")
日付文字列を変換するには、
datetime
を使用します。d = datetime("2022-06-28 12:34:56")
入力形式を指定するには、名前と値の引数
InputFormat
を使用します。d = "28 June 2022"; d = datetime(d,"InputFormat","dd MMMM yyyy")
時、分、および秒として経過時間を表すテキスト タイムスタンプを変換するには、関数
duration
を使用します。d = duration("08:17:43")
日付値を使用する関数の置き換え
MATLAB には、シリアル日付値を使用し、シリアル日付値または日付文字列として結果を返す古い日付と時刻の関数があります。たとえば、関数 datenum
は、指定した日付と時刻をシリアル日付値として返します。関数 datestr
は、日付と時刻を日付文字列として返します。date
、now
、today
などの関数は、シリアル日付値または日付文字列を返します。これらの関数は推奨されません。
次の表では、一般的な日付と時刻の演算、これらの演算を実行する非推奨の関数、および推奨される代替関数について説明します。表に記載されている非推奨の関数を削除する予定はありません。
演算 | 非推奨の関数 | 推奨の置き換え |
---|---|---|
時間を時点に加算する。 |
例: 時の配列を加算します。 d = datetime("2022-01-01");
d = d + hours(0:4:12) 例: カレンダー月の配列を加算します。 d = datetime("2022-01-01");
d = d + calmonths(0:2) | |
現在の時刻を (日付ベクトルとして) 返す。 |
例: 現在の時刻を d = datetime % or d = datetime("now") 例: 現在の時刻を日付ベクトルとして返します。 d = datevec(datetime) | |
現在の日付を (テキストとして) 返す。 |
例: 現在の日付を d = datetime("today")
例: 現在の日付をテキストとして返します。 d = datetime("today");
d = string(d)
| |
日付と時刻を (数値として扱われるデータ型として) 指定する。 |
例: シリアル日付値を d = 738522; d = datetime(d,"ConvertFrom","datenum") | |
日付と時刻を (テキストとして) 指定する。 | 例: d = datetime(2022,6,28,12,34,56) d = string(d) | |
日付ベクトルをテキストに変換する。 | 例: 日付ベクトルを dv = [2022 6 28 12 34 56]; d = datetime(dv) d = string(d) | |
月の最後の日付を返す。 | 入力として 例: 現在の月の最後の日付を d = datetime("today") endMonth = dateshift(d,"end","month") 例: 年と月の数値入力として y = 2022; m = 6; endMonth = dateshift(datetime(y,m,1),"end","month") | |
2 つの時点の差を計算する。 |
例: startOfToday = datetime("today") currentTime = datetime("now") elapsedTime = currentTime - startOfToday 例: d1 = datetime("2022-01-01") d2 = datetime("now") elapsedTime = between(d1,d2) | |
月の曜日の最後の出現日付を返す。 | 関数 例: 2021 年 10 月の最後の火曜日を october = datetime(2021,10,1); endOfOctober = dateshift(october,"end","month"); lastTuesday = dateshift(endOfOctober,"dayofweek","Tuesday","previous") | |
日付と時刻を Excel® のシリアル日付値に変換する。 | 関数 例: 現在の日付を Excel のシリアル日付値として返します。 d = datetime("today")
excelNum = exceltime(d)
| |
日付間の月数を返す。 | 入力として 例: 2021 年 1 月 1 日と現在の日付間の月数を返します。 d1 = datetime("2021-01-01") d2 = datetime("today") numMonths = between(d1,d2,"months") | |
現在の時刻を返す。 |
例: 現在の時刻を d = datetime % or d = datetime("now") | |
月の曜日の特定の出現の日付を返す。 | nweekdate | 関数 例: 2021 年 10 月の最初の火曜日を october = datetime(2021,10,1); firstTuesday = dateshift(october,"dayofweek","Tuesday",1) |
現在の日付を返す。 | today |
例: 現在の日付を d = datetime("today")
|
通年の週番号を (数値として) 返す。 | 入力として 例: 現在の日付の通年の週番号を返します。 d = datetime("today") weekNumber = week(d,"weekofyear") | |
Excel のシリアル日付値を MATLAB の日付と時刻に変換する。 |
例: Excel のシリアル日付値を excelNum = 44481 dt = datetime(excelNum,"ConvertFrom","excel") |
日付と時刻の成分の非推奨の構文
MATLAB には、入力した日付と時刻の成分を返す日付と時刻の関数があります。時点の成分は、年、四半期、月、日、時、分、および秒です。たとえば、2022 年 6 月 28 日午後 12:34:56 の年成分は 2022 で日成分は 28 です。示されてはいませんが、この時点は 2022 年の第 2 四半期内にあるため、四半期成分 2 もあります。
日付と時刻の成分を返す関数は、year
、quarter
、month
などです。関数 datevec
、ymd
、hms
、および timeofday
も成分を数値ベクトルまたは行列として返します。これらのすべての関数で入力として datetime
配列がサポートされています。
また、これらの関数の多くでは、入力としてシリアル日付値および日付文字列もサポートされています。ただし、それらの入力をサポートしている構文は推奨されません。代わりに、入力として datetime
配列を使用してください。次の表では、これらの関数の非推奨の構文および推奨される構文を示します。
これらの関数からシリアル日付値および日付文字列のサポートを削除する予定はありません。
日付と時刻の成分の関数 | 非推奨の構文 | 推奨される構文 |
---|---|---|
dateVector = datevec(738700.52426)
dateVector = datevec("2022-06-28 12:34:56")
| d = datetime("2022-06-28 12:34:56")
dateVector = datevec(d)
| |
dayNum = day(738700.52426)
dayNum = day("2022-06-28 12:34:56")
| d = datetime("2022-06-28 12:34:56") dayNum = day(d) % or dayNum = d.Day | |
hourNum = hour(738700.52426)
hourNum = hour("2022-06-28 12:34:56")
| d = datetime("2022-06-28 12:34:56") hourNum = hour(d) % or hourNum = d.Hour | |
minuteNum = minute(738700.52426)
minuteNum = minute("2022-06-28 12:34:56")
| d = datetime("2022-06-28 12:34:56") minuteNum = minute(d) % or minuteNum = d.Minute | |
monthNum = month(738700.52426)
monthNum = month("2022-06-28 12:34:56")
| d = datetime("2022-06-28 12:34:56") monthNum = month(d) % or monthNum = d.Month | |
quarterNum = quarter(738700.52426)
quarterNum = quarter("2022-06-28 12:34:56")
| d = datetime("2022-06-28 12:34:56")
quarterNum = quarter(d)
| |
secondNum = second(738700.52426)
secondNum = second("2022-06-28 12:34:56")
| d = datetime("2022-06-28 12:34:56") secondNum = second(d) % or secondNum = d.Second | |
yearNum = year(738700.52426)
yearNum = year("2022-06-28 12:34:56")
| d = datetime("2022-06-28 12:34:56") yearNum = year(d) % or yearNum = d.Year |
独自の関数を更新する際のガイドライン
他の MATLAB ユーザーのためにコードを記述する場合、シリアル日付値および日付文字列との下位互換性を維持しながら datetime
配列を受け入れることができるように関数を更新すると便利です。datetime
配列の採用によって、コードに MathWorks® 製品との整合性を持たせることができます。
既存のコードでは、入力引数として
datetime
配列を受け入れます。入力引数をシリアル日付値または日付文字列の配列にすることができる場合、その引数をdatetime
配列にもできるようにコードを更新します。コードが既にシリアル日付値または日付文字列に基づいている場合は、
datetime
の入力を簡単かつすぐに受け入れる方法として、コードの最初のステップとして入力を変換することができます。datetime
配列をシリアル日付値に変換するには、関数convertTo
を使用します。datetime
配列を日付文字列に変換するには、関数string
またはchar
を使用します。たとえば、関数
myFunc
でシリアル日付値を受け入れている場合は、datetime
配列も受け入れるように関数を更新します。コードの他の部分は変更せずに残します。function y = myFunc(d) if (isdatetime(d)) d = convertTo(d,"datenum") <line 1 of original code> <line 2 of original code> ...
一般に、出力タイプは変更しません。既存のコードでシリアル日付値または日付文字列が返される場合でも、他のユーザーがコードを利用するときに予期する出力の型を維持することをお勧めします。
長期的には、
datetime
配列の観点から時間ベースの計算を実行するように既存のコードを書き換えることを検討します。datetime
の入力をシリアル日付値または日付文字列に変換しただけでは、タイム ゾーンなどのプロパティの情報が失われます。コードを書き換え、そのコードで入力として日付文字列を受け入れていた場合は、下位互換性を考慮する必要が生じることがあります。下位互換性を維持するために、日付文字列を関数
datenum
による解釈と同じ方法で解釈できます。下位互換性を維持する方法で日付文字列を
datetime
値に変換するには、関数matlab.datetime.compatibility.convertDatenum
を使用します。この関数は、独自関数用の互換性レイヤーとして設計されています。d = "01/02/22"; d = matlab.datetime.compatibility.convertDatenum(d)
新しいコードでは、時点を表す場合は、主なデータ型として
datetime
配列を使用します。経過時間を表す場合は、主な型としてduration
配列を使用します。入力引数としてシリアル日付値および日付文字列も受け入れる必要がある場合は、
datetime
関数を使用して変換します。