テキストと datetime
値または duration
値の間の変換
この例では、テキストと日付および時刻を表すデータ型の間で変換を行う方法を説明します。datetime
データ型は 2020 年 8 月 24 日午前 10 時 50 分 30 秒などの時点を表し、duration
データ型は 3 時間、47 分、16 秒などの時間の長さを表します。日付と時刻をテキストに変換する一般的な理由は、それらをプロット ラベルやファイル名として使用される string に追加することです。同様に、ファイルに日付と時刻をテキストとして格納するデータの列がある場合は、そのデータをこれらの列から datetime
配列または duration
配列に読み取ることができ、データが解析にさらに役立つようになります。
次のように変換してください。
datetime
値またはduration
値からテキストへは、関数string
を使用します。(関数char
を使用して、これらの値を文字ベクトルに変換することもできます。)テキストから
datetime
値へは、関数datetime
を使用します。テキストから
duration
値へは、関数duration
を使用します。
また、関数 readcell
、readvars
、readtable
などの一部の関数は、ファイルからテキストを読み取って、日付と時刻を表すテキストを datetime
配列または duration
配列に自動的に変換します。
datetime
値と duration
値からテキストへの変換
現在の日付と時刻を表す datetime
値を作成します。
d = datetime("now")
d = datetime
12-Feb-2024 23:14:22
d
をテキストに変換するには、関数 string
を使用します。
str = string(d)
str = "12-Feb-2024 23:14:22"
同様に、duration
値を変換できます。たとえば、まず 3 時間と 30 分を表す duration
値を作成します。この値を作成する 1 つの方法は、関数 hours
と関数 minutes
を使用することです。これらの関数は、結合できる duration
値を作成します。
d = hours(3) + minutes(30)
d = duration
3.5 hr
d
をテキストに変換します。
str = string(d)
str = "3.5 hr"
このような string の一般的な用途の 1 つに、プロット ラベルやファイル名への追加があります。たとえば、今日の日付を含むタイトルをもつ簡単なプロットを作成します。まず、日付を変換して string myTitle
に追加します。
d = datetime("today")
d = datetime
12-Feb-2024
myTitle = "Plot generated on: " + string(d)
myTitle = "Plot generated on: 12-Feb-2024"
そのタイトルをもつプロットを作成します。
plot(rand(10,1)) title(myTitle)
配列から string 配列への変換
datetime
値または duration
値の配列も変換できます。関数 string
を使用して変換すると、結果として得られる string 配列は同じサイズになります。
たとえば、datetime
配列を作成します。
D = datetime(2021,1:3,15,12,0,0)'
D = 3x1 datetime
15-Jan-2021 12:00:00
15-Feb-2021 12:00:00
15-Mar-2021 12:00:00
D
を string 配列に変換します。
str = string(D)
str = 3x1 string
"15-Jan-2021 12:00:00"
"15-Feb-2021 12:00:00"
"15-Mar-2021 12:00:00"
同様に、duration
配列を作成して変換します。duration
配列を作成する 1 つの方法は、関数 duration
を使用することです。時間、分、秒を指定する数値入力で呼び出します。
D = duration(1:3,30,0)'
D = 3x1 duration
01:30:00
02:30:00
03:30:00
duration
配列を変換します。
str = string(D)
str = 3x1 string
"01:30:00"
"02:30:00"
"03:30:00"
出力テキストの形式の指定
datetime
と duration
のデータ型には、表示形式を指定するプロパティがあります。ライブ スクリプトとコマンド ウィンドウでは、その形式を使用して値が表示されます。関数 string
を使用して datetime
配列または duration
配列を変換する際に、別の形式を指定できます。
たとえば、datetime
値を作成して表示します。
d = datetime("now")
d = datetime
12-Feb-2024 23:14:26
月、日、年、時刻の完全名を表す文字識別子を使用して形式を指定します。d
を、その形式を使用して日付と時刻を表す string に変換します。
fmt = "dd MMMM yyyy, hh:mm:ss a";
str = string(d,fmt)
str = "12 February 2024, 11:14:26 PM"
同様に、duration
配列を変換する際に形式を指定できます。まず、duration
値を作成します。
d = hours(1) + minutes(30) + seconds(45)
d = duration
1.5125 hr
時間、分、秒を表す識別子 hh:mm:ss
を使用して、d
を string に変換します。
fmt = "hh:mm:ss";
string(d,fmt)
ans = "01:30:45"
メモ: 関数 string
では、他のデータ型を変換する場合、2 番目の形式の入力引数は提供されません。
出力テキストのロケールの指定
異なるロケールを使用した datetime
配列と duration
配列の変換もできます。ロケールには、日と月を表す適切な名前があります。既定のロケール以外のロケールを使用するには、それを別の入力引数として指定します。
たとえば、ロケールとして fr_FR
を指定し、フランス語の月名を使用して現在の日付と時刻を表します。
d = datetime("now")
d = datetime
12-Feb-2024 23:14:26
fmt = "dd MMMM yyyy, hh:mm:ss a"; locale = "fr_FR"; str = string(d,fmt,locale)
str = "12 février 2024, 11:14:26 PM"
同様に、duration
配列を変換する際にロケールを指定できます。フランス語のロケールでは、時間について異なる略語が使用されます。
d = hours(5)
d = duration
5 hr
fmt = "h"; locale = "fr_FR"; str = string(d,fmt,locale)
str = "5 h"
メモ: 関数 string
では、他のデータ型を変換する場合、3 番目のロケールの入力引数は提供されません。
テキストから datetime
値への変換
テキストで、日付と時刻が関数 datetime
によって認識される形式で指定されている場合は、そのテキストを datetime
値に変換できます。
日付と時刻を表す string を作成します。
str = "2021-09-15 09:12:34"
str = "2021-09-15 09:12:34"
str
を datetime
値に変換します。
d = datetime(str)
d = datetime
15-Sep-2021 09:12:34
入力テキストの形式の解釈
関数 datetime
は、一般的に使用される多くのテキスト形式を認識します。ただし、テキストが datetime
で認識されない形式の場合は、入力引数として形式を指定できます。
たとえば、ISO 8601 規格を使用して日付と時刻を指定する string を作成します。
str = "2021-09-15T091234"
str = "2021-09-15T091234"
関数 datetime
はこの形式を認識しません。この string を datetime
値に変換するには、入力テキストの形式を指定します。次に、関数 datetime
を呼び出します。(形式にリテラル テキストが含まれる場合は、引用符で囲みます。この例では、リテラル テキスト T
を 'T'
と指定します。)
infmt = "yyyy-MM-dd'T'HHmmss"; d = datetime(str,"InputFormat",infmt)
d = datetime
15-Sep-2021 09:12:34
テキストから duration
値への変換
テキストで、時間が関数 duration
によって認識される形式で指定されている場合は、そのテキストを duration
値に変換できます。
時間の長さを表す string を作成します。
str = "00:34:01"
str = "00:34:01"
str
を duration
値に変換します。
d = duration(str)
d = duration
00:34:01
入力テキストの形式の解釈
関数 duration
は、コロンで区切られた日数、時間数、分数、秒数を指定する形式を認識します。このような形式は次のとおりです。
"dd:hh:mm:ss"
"hh:mm:ss"
"mm:ss"
"hh:mm"
最大 9 個の文字
S
で秒の小数部を示す、最初から 3 つの形式のいずれか ("hh:mm:ss.SSSS"
など)
入力テキストがあいまいな場合、つまり "mm:ss"
形式または "hh:mm"
形式と一致すると解釈される可能性がある場合は、入力引数として形式を指定します。
たとえば、時間の長さを表す string を作成します。
str = "34:01"
str = "34:01"
この string を 34 分 1 秒の duration に変換するには、形式を指定します。次に、関数 duration
を呼び出します。
infmt = "mm:ss"; d = duration(str,"InputFormat",infmt)
d = duration
00:34:01
ファイルからの日付と時刻の読み取り
スプレッドシートやテキスト ファイルなどの多くのファイルでは、日付と時刻がテキストとして保存されます。日付と時刻が認識される形式の場合、readcell
、readvars
、readtable
などの関数は、それらを読み取って datetime
配列または duration
配列に自動的に変換できます。
たとえば、CSV ファイル outages.csv
は、MATLAB® に同梱されているサンプル ファイルです。このファイルには一連の停電のデータが含まれています。outages.csv
の最初の行は列名です。ファイルの残りは、停電ごとのコンマ区切りのデータ値です。このファイルには 1468 行のデータが含まれています。最初の数行を以下に示します。
Region,OutageTime,Loss,Customers,RestorationTime,Cause SouthWest,2002-02-01 12:18,458.9772218,1820159.482,2002-02-07 16:50,winter storm SouthEast,2003-01-23 00:49,530.1399497,212035.3001,,winter storm SouthEast,2003-02-07 21:15,289.4035493,142938.6282,2003-02-17 08:14,winter storm West,2004-04-06 05:44,434.8053524,340371.0338,2004-04-06 06:10,equipment fault MidWest,2002-03-16 06:18,186.4367788,212754.055,2002-03-18 23:23,severe storm ...
outages.csv
から最初の 3 列を読み取って配列に直接格納するには、関数 readvars
を使用します。テキストを string 配列が格納される変数に読み取るには、名前と値の引数 TextType
を指定します。ただし、この関数は CSV ファイルの 2 列目の値を日付と時刻として認識し、変数 OutageTime
を datetime
配列として作成します。各出力配列の最初の 5 行を表示します。
[Region,OutageTime,Loss] = readvars("outages.csv","TextType","string"); whos Region OutageTime Loss
Name Size Bytes Class Attributes Loss 1468x1 11744 double OutageTime 1468x1 23520 datetime Region 1468x1 83272 string
Loss(1:5)
ans = 5×1
458.9772
530.1399
289.4035
434.8054
186.4368
OutageTime(1:5)
ans = 5x1 datetime
2002-02-01 12:18
2003-01-23 00:49
2003-02-07 21:15
2004-04-06 05:44
2002-03-16 06:18
Region(1:5)
ans = 5x1 string
"SouthWest"
"SouthEast"
"SouthEast"
"West"
"MidWest"
スプレッドシート全体を読み取ってデータを table に格納するには、関数 readtable
を使用します。テキストを string 配列が格納される table 変数に読み取るには、名前と値の引数 TextType
を指定します。ただし、readtable
は、OutageTime
と RestorationTime
を datetime
配列が格納される table 変数に変換します。
T = readtable("outages.csv","TextType","string")
T=1468×6 table
Region OutageTime Loss Customers RestorationTime Cause
___________ ________________ ______ __________ ________________ _________________
"SouthWest" 2002-02-01 12:18 458.98 1.8202e+06 2002-02-07 16:50 "winter storm"
"SouthEast" 2003-01-23 00:49 530.14 2.1204e+05 NaT "winter storm"
"SouthEast" 2003-02-07 21:15 289.4 1.4294e+05 2003-02-17 08:14 "winter storm"
"West" 2004-04-06 05:44 434.81 3.4037e+05 2004-04-06 06:10 "equipment fault"
"MidWest" 2002-03-16 06:18 186.44 2.1275e+05 2002-03-18 23:23 "severe storm"
"West" 2003-06-18 02:49 0 0 2003-06-18 10:54 "attack"
"West" 2004-06-20 14:39 231.29 NaN 2004-06-20 19:16 "equipment fault"
"West" 2002-06-06 19:28 311.86 NaN 2002-06-07 00:51 "equipment fault"
"NorthEast" 2003-07-16 16:23 239.93 49434 2003-07-17 01:12 "fire"
"MidWest" 2004-09-27 11:09 286.72 66104 2004-09-27 16:37 "equipment fault"
"SouthEast" 2004-09-05 17:48 73.387 36073 2004-09-05 20:46 "equipment fault"
"West" 2004-05-21 21:45 159.99 NaN 2004-05-22 04:23 "equipment fault"
"SouthEast" 2002-09-01 18:22 95.917 36759 2002-09-01 19:12 "severe storm"
"SouthEast" 2003-09-27 07:32 NaN 3.5517e+05 2003-10-04 07:02 "severe storm"
"West" 2003-11-12 06:12 254.09 9.2429e+05 2003-11-17 02:04 "winter storm"
"NorthEast" 2004-09-18 05:54 0 0 NaT "equipment fault"
⋮
これらの table 変数は datetime
配列であるため、これらを使用して便利な計算を実行できます。たとえば、停電の継続期間を計算して table に duration
配列として付加できます。
T.OutageDuration = T.RestorationTime - T.OutageTime
T=1468×7 table
Region OutageTime Loss Customers RestorationTime Cause OutageDuration
___________ ________________ ______ __________ ________________ _________________ ______________
"SouthWest" 2002-02-01 12:18 458.98 1.8202e+06 2002-02-07 16:50 "winter storm" 148:32:00
"SouthEast" 2003-01-23 00:49 530.14 2.1204e+05 NaT "winter storm" NaN
"SouthEast" 2003-02-07 21:15 289.4 1.4294e+05 2003-02-17 08:14 "winter storm" 226:59:00
"West" 2004-04-06 05:44 434.81 3.4037e+05 2004-04-06 06:10 "equipment fault" 00:26:00
"MidWest" 2002-03-16 06:18 186.44 2.1275e+05 2002-03-18 23:23 "severe storm" 65:05:00
"West" 2003-06-18 02:49 0 0 2003-06-18 10:54 "attack" 08:05:00
"West" 2004-06-20 14:39 231.29 NaN 2004-06-20 19:16 "equipment fault" 04:37:00
"West" 2002-06-06 19:28 311.86 NaN 2002-06-07 00:51 "equipment fault" 05:23:00
"NorthEast" 2003-07-16 16:23 239.93 49434 2003-07-17 01:12 "fire" 08:49:00
"MidWest" 2004-09-27 11:09 286.72 66104 2004-09-27 16:37 "equipment fault" 05:28:00
"SouthEast" 2004-09-05 17:48 73.387 36073 2004-09-05 20:46 "equipment fault" 02:58:00
"West" 2004-05-21 21:45 159.99 NaN 2004-05-22 04:23 "equipment fault" 06:38:00
"SouthEast" 2002-09-01 18:22 95.917 36759 2002-09-01 19:12 "severe storm" 00:50:00
"SouthEast" 2003-09-27 07:32 NaN 3.5517e+05 2003-10-04 07:02 "severe storm" 167:30:00
"West" 2003-11-12 06:12 254.09 9.2429e+05 2003-11-17 02:04 "winter storm" 115:52:00
"NorthEast" 2004-09-18 05:54 0 0 NaT "equipment fault" NaN
⋮
参考
char
| string
| duration
| datetime
| hours
| minutes
| seconds
| readcell
| readvars
| readtable
| readtimetable
| table
| timetable
関連するトピック
- MATLAB での日付と時刻の表現
- 日付と時刻のシーケンスの生成
- datetime 配列の日付と時刻の成分の抽出または割り当て
- 日付と時刻の比較
- 日付と時刻の算術演算
- 日付と時刻のユリウス日または POSIX 時間への変換