日付・時刻データの変換 †
datenum †
入力された日時を西暦0000年1月0日からの経過日数として値に変換する.
出力はただの数値のため,演算に使える.
単位はdayで,1日先の日付になると値が1増える.1時間は1/24(=0.0417)になる.
- 日時を表す文字列→シリアル値
DateNumber = datenum(DateString)
DateNumber = datenum(DateString,formatIn)
formatInは,DateStringの形式に合わせて,'yyyy/mm/dd'のように使う.下記は例.
>> datenum('2000/01/01','yyyy/mm/dd')
ans = 730486
>>datenum('2000/01/02 03:04:05' ,'yyyy/mm/dd HH:MM:SS')
ans = 7.3049e+05
- 日時を表す数値(整数)→シリアル値
DateNumber = datenum(Y,M,D)
DateNumber = datenum(Y,M,D,H,MN,S)
DateNumber = datenum(DateVector)
単純に年月日,時分秒を整数として入力する.年月日までの3つか,秒までの6つのどちらかしか受け付けないので注意.
DateVectorは,m行3列(年月日)かm行6列(年月日時分秒)の行列から,m個の値を返す.
DateVectorを使うと一発で複数の変換ができ,forループ不要な点が良い.
>> vec = [1990,06,01; 1990,07,01; 1990,08,01]
vec =
1990 6 1
1990 7 1
1990 8 1
>> datenum(vec)
ans =
726985
727015
727046
- datetime型→シリアル値
datetime型の変数tを入力するだけ.
DateNumber = datenum(t)
datestr †
日付を指定の形式で文字列に変換する.図の作成や表示で頻繁に使用する.
- シリアル日付値(datenumの出力)→文字列
DateString = datestr(DateNumber,formatOut)
DateNumberはベクトルでもOK.
formatOutは数値識別子(整数)か文字列ymd等の文字列で出力テキストの形式を指定する.
数値識別子と出力形式の対応を覚えるのは大変なので,自分で書いて指定したほうが良い.
>> datestr(726985,'yyyy/mm/dd')
ans = 1990/06/01
>> datestr(726985, 26) % formatOutの数値識別子
ans = 1990/06/01
>> datestr(726985.5,'mm/dd HH:MM')
ans = 06/01 12:00
- datetime型→文字列
シリアル値→文字列の時と変わらない.
DateString = datestr(t,formatOut)
datetime †
※形式の指定に注意が必要.
入力引数をdatetime型の変数に変換する.datetime型も日付計算は可能.
- 文字列→datetime型
t = datetime(DateStrings,'InputFormat',infmt)
infmtのフォーマット指定がdatenumやdatestrと異なる.特にmonthとminuteに注意する.
月と時間は大文字のMとHでなければ正しく処理が行われない.
datenumとdatestrでは,月が小文字のmで,分が大文字のMと認識するため紛らわしい.
>> datetime('1990/06/01','InputFormat','yyyy/mm/dd') % datetimeではmは分として認識される
ans = 1990/01/01 00:06:00
>> datetime('1990/06/01','InputFormat','yyyy/MM/dd') % datetimeではMが月を表す
ans = 1990/06/01
- シリアル日付値(datenumの出力)→datetime型
直接変換できるようにはなっていない.一回datestrでシリアル値を変換した後にdatetimeを使えばできる.
ここでもdatestrとdatetimeのフォーマット指定方法が異なるのがわかる.
>> datetime(datestr(726985.5,'yyyy/mm/dd HH:MM'),'InputFormat','yyyy/MM/dd HH:mm')
ans = 1990/06/01 12:00:00
参考 MathWorks公式 †