#author("2018-01-13T14:09:53+09:00","default:Miyashita","Miyashita") #author("2018-07-25T21:21:58+09:00","default:Miyashita","Miyashita") *日付・時刻データの変換 [#t5260690] **datenum [#a4be7a3b] 入力された日時を西暦0000年1月0日からの経過日数として値に変換する.~ 出力はただの数値のため,演算に使える.~ 単位はdayで,1日先の日付になると値が1増える.1時間は1/24(=0.0417)になる.~ -日時を表す文字列→シリアル値~ DateNumber = datenum(DateString) DateNumber = datenum(DateString,formatIn) #codeprettify(lang-matlab){{ 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 #codeprettify(lang-matlab){{ >> 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) #codeprettify(lang-matlab){{ 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 #codeprettify(lang-matlab){{ >> 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) #codeprettify(lang-matlab){{ DateNumber = datenum(t) }} **datestr [#s734b916] 日付を指定の形式で文字列に変換する.図の作成や表示で頻繁に使用する. -シリアル日付値(datenumの出力)→文字列~ DateString = datestr(DateNumber,formatOut) #codeprettify(lang-matlab){{ 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 #codeprettify(lang-matlab){{ >> 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) #codeprettify(lang-matlab){{ DateString = datestr(t,formatOut) }} **datetime [#m7fcbaec] ※形式の指定に注意が必要.~ 入力引数をdatetime型の変数に変換する.datetime型も日付計算は可能.~ -文字列→datetime型~ t = datetime(DateStrings,'InputFormat',infmt) #codeprettify(lang-matlab){{ 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 #codeprettify(lang-matlab){{ >> 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 #codeprettify(lang-matlab){{ >> datetime(datestr(726985.5,'yyyy/mm/dd HH:MM'),'InputFormat','yyyy/MM/dd HH:mm') ans = 1990/06/01 12:00:00 }} ***参考 MathWorks公式 [#f5f343ce] -[[datenum>https://jp.mathworks.com/help/matlab/ref/datenum.html]]~ -[[datestr>https://jp.mathworks.com/help/matlab/ref/datestr.html]]~ -[[datetime>https://jp.mathworks.com/help/matlab/ref/datetime.html]]~