日時には様々な表記が存在するため、文字列からDateTime・DateTimeOffsetへの変換はその逆よりも考慮すべき事柄が多く、すべての表記に対応しようとすると複雑になります。 まずはシンプルな例として、Parseメソッドを使った例を見ていきます。

DateTime/DateTimeOffset.Parseメソッドで文字列を日時に変換する
using System;

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

    // 文字列をDateTimeに変換
    foreach (var input in inputs) {
      Console.WriteLine("{0,-35} -> {1}", input, DateTime.Parse(input));
    }
    Console.WriteLine();

    // 文字列をDateTimeOffsetに変換
    foreach (var input in inputs) {
      Console.WriteLine("{0,-35} -> {1}", input, DateTimeOffset.Parse(input));
    }
    Console.WriteLine();
  }
}
実行結果
Mon, 01 Apr 2013 15:00:30 GMT       -> 2013/04/02 0:00:30
2013-04-01T15:00:30.1230000+09:00   -> 2013/04/01 15:00:30
2013年4月1日 15:00:30                  -> 2013/04/01 15:00:30

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

DateTime.ParseおよびDateTimeOffset.Parseメソッドは、引数で与えられた文字列を解析し、DateTime・DateTimeOffsetに変換た結果を返します。 Parseメソッドは、標準の書式としてサポートされている形式での解析を試み、解析できた場合はその結果を返します。

Parseメソッドに指定された文字列が日時として解析できない場合や、日時として不正な形式・値の場合は、例外FormatExceptionがスローされます。

Parseメソッドで変換できない場合にFormatExceptionがスローされることを望まない場合や、変換できた場合・できなかった場合で処理を分岐させたいような場合は、Parseメソッドの代わりにTryParseメソッドを使うこともできます。