また、Parseメソッドに対するTryParseメソッドと同様、ParseExactメソッドにも変換できなかった場合でも例外をスローしないTryParseExactメソッドが存在します。 例外をキャッチするかわりに、変換できたかどうかで条件分岐させたい場合はTryParseExactメソッドを使うことができます。

DateTime/DateTimeOffset.TryParseExactメソッドで書式を指定して文字列からの変換を試みる
using System;
using System.Globalization;

class Sample {
  static void Main()
  {
    var inputs = new string[] {
      "Mon, 01 Apr 2013 15:00:30 GMT",     // RFC1123形式の文字列
      "2013年4月1日 15:00:30",             // 一般的な形式の文字列
      "2013-04-01T15:00:30.1230000+09:00", // ISO8601形式の文字列
      "2013-04-01T15:00:30.1230000",       // ISO8601形式の文字列 (オフセット無し)
      "2013-04-01",                        // ISO8601形式の文字列 (日付のみ)
      "15:00:30",                          // ISO8601形式の文字列 (時刻のみ)
    };

    foreach (var input in inputs) {
      DateTime dt;

      // 書式"o"で文字列からDateTimeへの変換を試行する
      if (DateTime.TryParseExact(input, "o", null, DateTimeStyles.None, out dt))
        Console.WriteLine("{0,-35} -> {1}", input, dt);
      else
        Console.WriteLine("{0,-35} -> (invalid format)", input);
    }
    Console.WriteLine();

    foreach (var input in inputs) {
      DateTimeOffset dto;

      // 書式"o"で文字列からDateTimeOffsetへの変換を試行する
      if (DateTimeOffset.TryParseExact(input, "o", null, DateTimeStyles.None, out dto))
        Console.WriteLine("{0,-35} -> {1}", input, dto);
      else
        Console.WriteLine("{0,-35} -> (invalid format)", input);
    }
    Console.WriteLine();
  }
}
実行結果
Mon, 01 Apr 2013 15:00:30 GMT       -> (invalid format)
2013年4月1日 15:00:30                  -> (invalid format)
2013-04-01T15:00:30.1230000+09:00   -> 2013/04/01 15:00:30
2013-04-01T15:00:30.1230000         -> 2013/04/01 15:00:30
2013-04-01                          -> (invalid format)
15:00:30                            -> (invalid format)

Mon, 01 Apr 2013 15:00:30 GMT       -> (invalid format)
2013年4月1日 15:00:30                  -> (invalid format)
2013-04-01T15:00:30.1230000+09:00   -> 2013/04/01 15:00:30 +09:00
2013-04-01T15:00:30.1230000         -> 2013/04/01 15:00:30 +09:00
2013-04-01                          -> (invalid format)
15:00:30                            -> (invalid format)

このように、変換できたかどうかの結果はtrue/falseの値として返される、変換できた場合は結果をoutパラメータで受け取る、といった点はTryParseメソッドと同様です。 一方、TryParseExactメソッドでは変換時のオプションをDateTimeStylesで指定する必要があります。 DateTimeStylesについては別途解説します。