Main Content

シリアル日付値と日付文字列の推奨されないインスタンスの置き換え

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 は、日付と時刻を日付文字列として返します。datenowtoday などの関数は、シリアル日付値または日付文字列を返します。これらの関数は推奨されません。

次の表では、一般的な日付と時刻の演算、これらの演算を実行する非推奨の関数、および推奨される代替関数について説明します。表に記載されている非推奨の関数を削除する予定はありません。

演算

非推奨の関数

推奨の置き換え

時間を時点に加算する。

addtodate

duration または calendarDuration の値を datetime の値に加算します。

例: 時の配列を加算します。

d = datetime("2022-01-01");
d = d + hours(0:4:12)

例: カレンダー月の配列を加算します。

d = datetime("2022-01-01");
d = d + calmonths(0:2)

現在の時刻を (日付ベクトルとして) 返す。

clock

datetime または datetime("now")、および datevec を使用して日付ベクトルに変換します。

例: 現在の時刻を datetime 値として返します。

d = datetime
% or
d = datetime("now")

例: 現在の時刻を日付ベクトルとして返します。

d = datevec(datetime)

現在の日付を (テキストとして) 返す。

date

datetime("today") を使用します。

例: 現在の日付を datetime 値として返します。

d = datetime("today")

例: 現在の日付をテキストとして返します。

d = datetime("today");
d = string(d)

日付と時刻を (数値として扱われるデータ型として) 指定する。

datenum

datetime 値を使用します。

例: シリアル日付値を datetime 値に変換します。

d = 738522;
d = datetime(d,"ConvertFrom","datenum")

日付と時刻を (テキストとして) 指定する。

datestr

関数 string または char を使用します。

例: datetime 値をテキストに変換します。

d = datetime(2022,6,28,12,34,56)
d = string(d)

日付ベクトルをテキストに変換する。

datestr

関数 string または char を使用します。

例: 日付ベクトルを datetime 値に変換してからテキストに変換します。

dv = [2022 6 28 12 34 56];
d = datetime(dv)
d = string(d)

月の最後の日付を返す。

eomdate

入力として datetime 値を指定して関数 dateshift を使用します。

例: 現在の月の最後の日付を datetime 値として返します。

d = datetime("today")
endMonth = dateshift(d,"end","month")

例: 年と月の数値入力として ym を指定して月の最後の日付を返します。

y = 2022;
m = 6;
endMonth = dateshift(datetime(y,m,1),"end","month")

2 つの時点の差を計算する。

etime

datetime 値を減算するか、関数 between を使用します。

例: datetime 値を減算します。結果は、固定長の単位の経過時間を表す duration 値です。

startOfToday = datetime("today")
currentTime = datetime("now")
elapsedTime = currentTime - startOfToday

例: datetime 値間の差を返します。結果は、可変長のカレンダー単位の経過時間を表す calendarDuration 値です。

d1 = datetime("2022-01-01")
d2 = datetime("now")
elapsedTime = between(d1,d2)

月の曜日の最後の出現日付を返す。

lweekdate

関数 dateshift および datetime を使用します。

例: 2021 年 10 月の最後の火曜日を datetime 値として返します。

october = datetime(2021,10,1);
endOfOctober = dateshift(october,"end","month");
lastTuesday = dateshift(endOfOctober,"dayofweek","Tuesday","previous")

日付と時刻を Excel® のシリアル日付値に変換する。

m2xdate

関数 exceltime を使用します。

例: 現在の日付を Excel のシリアル日付値として返します。

d = datetime("today")
excelNum = exceltime(d)

日付間の月数を返す。

months

入力として datetime 値を指定して関数 between を使用します。

例: 2021 年 1 月 1 日と現在の日付間の月数を返します。

d1 = datetime("2021-01-01")
d2 = datetime("today")
numMonths = between(d1,d2,"months")

現在の時刻を返す。

now

datetime または datetime("now") を使用します。

例: 現在の時刻を datetime 値として返します。

d = datetime
% or
d = datetime("now")

月の曜日の特定の出現の日付を返す。

nweekdate

関数 dateshift および datetime を使用します。

例: 2021 年 10 月の最初の火曜日を datetime 値として返します。

october = datetime(2021,10,1);
firstTuesday = dateshift(october,"dayofweek","Tuesday",1)

現在の日付を返す。

today

datetime("today") を使用します。

例: 現在の日付を datetime 値として返します。

d = datetime("today")

通年の週番号を (数値として) 返す。

weeknum

入力として datetime 値を指定して関数 week を使用します。

例: 現在の日付の通年の週番号を返します。

d = datetime("today")
weekNumber = week(d,"weekofyear")

Excel のシリアル日付値を MATLAB の日付と時刻に変換する。

x2mdate

dateType"excel" に指定して datetime を使用します。

例: Excel のシリアル日付値を datetime 値に変換します。

excelNum = 44481
dt = datetime(excelNum,"ConvertFrom","excel")

日付と時刻の成分の非推奨の構文

MATLAB には、入力した日付と時刻の成分を返す日付と時刻の関数があります。時点の成分は、年、四半期、月、日、時、分、および秒です。たとえば、2022 年 6 月 28 日午後 12:34:56 の年成分は 2022 で日成分は 28 です。示されてはいませんが、この時点は 2022 年の第 2 四半期内にあるため、四半期成分 2 もあります。

日付と時刻の成分を返す関数は、yearquartermonth などです。関数 datevecymdhms、および timeofday も成分を数値ベクトルまたは行列として返します。これらのすべての関数で入力として datetime 配列がサポートされています。

また、これらの関数の多くでは、入力としてシリアル日付値および日付文字列もサポートされています。ただし、それらの入力をサポートしている構文は推奨されません。代わりに、入力として datetime 配列を使用してください。次の表では、これらの関数の非推奨の構文および推奨される構文を示します。

これらの関数からシリアル日付値および日付文字列のサポートを削除する予定はありません。

日付と時刻の成分の関数

非推奨の構文

推奨される構文

datevec

dateVector = datevec(738700.52426)
dateVector = datevec("2022-06-28 12:34:56")
d = datetime("2022-06-28 12:34:56")
dateVector = datevec(d)

day

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

hour

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

minute

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

month

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

quarter

quarterNum = quarter(738700.52426)
quarterNum = quarter("2022-06-28 12:34:56")
d = datetime("2022-06-28 12:34:56")
quarterNum = quarter(d)

second

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

year

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 関数を使用して変換します。

関連するトピック