#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]]~

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes