Dart DateTimeクラスのparse()メソッドとtryParse()メソッド

Dar言語StreamクラスtoSet()メソッドDart

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

コメント

タイトルとURLをコピーしました