Dart DateTimeクラスのparse()メソッドとtryParse()メソッドについてメモ書き。
parse()メソッドは引数として渡された日時フォーマットを解析してDateTime型を返す。
tryParse()メソッドも基本同じだが、引数として渡された値が解析できなかった場合の動作が異なる。parse()メソッドはFormatExceptionをスローするのに対して、tryParse()メソッドはnullを返す。
先ずは日付フォーマットから確認。
void main() {
final day1 = DateTime.parse('20230130');
print(day1);
final day2 = DateTime.parse('2023-01-30');
print(day2);
final day3 = DateTime.parse('20230141');
print(day3);
}
実行結果。
1行目は「20230130」の解析結果。
2行目は「2023-01-30」の解析結果。
3行目は「20230141」の解析結果。1月に41日は無いが、1月31日を超過した分を解析し2月10日で返している。
2023-01-30 00:00:00.000
2023-01-30 00:00:00.000
2023-02-10 00:00:00.000
次は時間を追加して確認。
void main() {
final day1 = DateTime.parse('20230130 10');
print(day1);
final day2 = DateTime.parse('2023-01-30T10:10:10.1111');
print(day2);
final day3 = DateTime.parse('20230141 267070.1');
print(day3);
}
実行結果。
1行目は「20230130 10」の解析結果。時、分、秒は2桁で渡す。
2行目は「2023-01-30T10:10:10.1111」の解析結果。日と時のセパレータとしてTを指定。小数点以下はミリセコンド(小数点以下3桁)とマイクロセコンド(小数点以下6桁)区切りとなる。4桁以降はマイクロセコンド区切りとなり、小数点以下6桁で出力されている。
3行目は「20230141 267070.1」の解析結果。日付同様、時刻の「267070」を解析し「03:11:10」を返している。
2023-01-30 10:00:00.000
2023-01-30 10:10:10.111100
2023-02-11 03:11:10.100
最後はparse()メソッドとtryParse()メソッドの比較。
解析エラーを出してみる。
void main() {
try {
// tryParse()メソッド
final dayTry = DateTime.tryParse('2023013010T');
print("tryParse:$dayTry");
// parse()メソッド
final day = DateTime.parse('2023-01-3010');
print("parse:$day");
} on FormatException catch (e) {
print("message:${e.message}\nsource:${e.source}");
}
}
実行結果。
1行目は「tryParse(‘2023013010T’)」の結果。nullを返している。
2〜3行目は「parse(‘2023-01-3010’)」の結果。try catch文でFormatExceptionをキャッチし処理をしている。
2行目はFormatExceptionの「message」プロパティを出力。String型でエラーメッセージが格納されている。
3行目はFormatExceptionの「source」プロパティを出力。dynamic型でエラーの原因となったソースコードが格納されている。
tryParse:null
message:Invalid date format
source:2023-01-3010
コメント