タイムゾーン・時刻の種類に関するオプションのうち、AdjustToUniversalおよびRoudtripKindは解析した日時の補正に関するオプションです。

AdjustToUniversalが指定された場合は、解析した日時をUTCに補正します。 このため、DateTime.Kindは常にDateTimeKind.Utc、DateTimeOffset.Offsetは00:00:00となります。 文字列中の日時がどのタイムゾーンも表さない場合、時刻の補正は行われず、DateTime.KindにはDateTimeKind.Unspecifiedが設定されます。

一方RoudtripKindが指定された場合は、解析した日時の種類とタイムゾーン情報を維持します。 時刻にZGMTなどのUTCであることを表す文字列が含まれていれば、DateTimeKind.Utcとして扱われます。 このオプションはDateTimeOffsetでは無視されます。

DateTime/DateTimeOffset.ParseExactメソッドでDateTimeStylesを指定し、変換した時刻のオフセットを補正または維持する
using System;
using System.Globalization;

class Sample {
  static void Main()
  {
    var inputs = new string[] {
      "2013-04-01T15:00:30.1234567",        // タイムゾーンの明記無し
      "2013-04-01T15:00:30.1234567Z",       // UTCでの時刻
      "2013-04-01T15:00:30.1234567+00:00",  // UTC+0での時刻
      "2013-04-01T15:00:30.1234567+09:00",  // UTC+9での時刻
      "2013-04-01T15:00:30.1234567-05:00",  // UTC-5での時刻
    };
    var styles = new DateTimeStyles[] {
      DateTimeStyles.None,              // オプション指定なし (デフォルトの動作)
      DateTimeStyles.AdjustToUniversal, // 時刻をUTCに補正する
      DateTimeStyles.RoundtripKind,     // 時刻のタイムゾーン情報を維持する
    };

    // 文字列をDateTimeへ変換
    Console.WriteLine("DateTime.ParseExact");
    foreach (var style in styles) {
      foreach (var input in inputs) {
        var dt = DateTime.ParseExact(input, "o", null, style);

        Console.WriteLine("{0,-35} ({1,-18}) -> {2} ({3})", input, style, dt, dt.Kind);
      }
      Console.WriteLine();
    }
    Console.WriteLine();

    // 文字列をDateTimeOffsetへ変換
    Console.WriteLine("DateTimeOffset.ParseExact");
    foreach (var style in styles) {
      foreach (var input in inputs) {
        try {
          var dto = DateTimeOffset.ParseExact(input, "o", null, style);

          Console.WriteLine("{0,-35} ({1,-18}) -> {2}", input, style, dto);
        }
        catch (FormatException) {
          Console.WriteLine("{0,-35} ({1,-18}) -> (FormatException)", input, style);
        }
      }
      Console.WriteLine();
    }
    Console.WriteLine();
  }
}
UTC+9の環境での実行結果例
DateTime.ParseExact
2013-04-01T15:00:30.1234567         (None              ) -> 2013/04/01 15:00:30 (Unspecified)
2013-04-01T15:00:30.1234567Z        (None              ) -> 2013/04/02 0:00:30 (Local)
2013-04-01T15:00:30.1234567+00:00   (None              ) -> 2013/04/02 0:00:30 (Local)
2013-04-01T15:00:30.1234567+09:00   (None              ) -> 2013/04/01 15:00:30 (Local)
2013-04-01T15:00:30.1234567-05:00   (None              ) -> 2013/04/02 5:00:30 (Local)

2013-04-01T15:00:30.1234567         (AdjustToUniversal ) -> 2013/04/01 15:00:30 (Unspecified)
2013-04-01T15:00:30.1234567Z        (AdjustToUniversal ) -> 2013/04/01 15:00:30 (Utc)
2013-04-01T15:00:30.1234567+00:00   (AdjustToUniversal ) -> 2013/04/01 15:00:30 (Utc)
2013-04-01T15:00:30.1234567+09:00   (AdjustToUniversal ) -> 2013/04/01 6:00:30 (Utc)
2013-04-01T15:00:30.1234567-05:00   (AdjustToUniversal ) -> 2013/04/01 20:00:30 (Utc)

2013-04-01T15:00:30.1234567         (RoundtripKind     ) -> 2013/04/01 15:00:30 (Unspecified)
2013-04-01T15:00:30.1234567Z        (RoundtripKind     ) -> 2013/04/01 15:00:30 (Utc)
2013-04-01T15:00:30.1234567+00:00   (RoundtripKind     ) -> 2013/04/02 0:00:30 (Local)
2013-04-01T15:00:30.1234567+09:00   (RoundtripKind     ) -> 2013/04/01 15:00:30 (Local)
2013-04-01T15:00:30.1234567-05:00   (RoundtripKind     ) -> 2013/04/02 5:00:30 (Local)


DateTimeOffset.ParseExact
2013-04-01T15:00:30.1234567         (None              ) -> 2013/04/01 15:00:30 +09:00
2013-04-01T15:00:30.1234567Z        (None              ) -> 2013/04/01 15:00:30 +00:00
2013-04-01T15:00:30.1234567+00:00   (None              ) -> 2013/04/01 15:00:30 +00:00
2013-04-01T15:00:30.1234567+09:00   (None              ) -> 2013/04/01 15:00:30 +09:00
2013-04-01T15:00:30.1234567-05:00   (None              ) -> 2013/04/01 15:00:30 -05:00

2013-04-01T15:00:30.1234567         (AdjustToUniversal ) -> 2013/04/01 6:00:30 +00:00
2013-04-01T15:00:30.1234567Z        (AdjustToUniversal ) -> 2013/04/01 15:00:30 +00:00
2013-04-01T15:00:30.1234567+00:00   (AdjustToUniversal ) -> 2013/04/01 15:00:30 +00:00
2013-04-01T15:00:30.1234567+09:00   (AdjustToUniversal ) -> 2013/04/01 6:00:30 +00:00
2013-04-01T15:00:30.1234567-05:00   (AdjustToUniversal ) -> 2013/04/01 20:00:30 +00:00

2013-04-01T15:00:30.1234567         (RoundtripKind     ) -> 2013/04/01 15:00:30 +09:00
2013-04-01T15:00:30.1234567Z        (RoundtripKind     ) -> 2013/04/01 15:00:30 +00:00
2013-04-01T15:00:30.1234567+00:00   (RoundtripKind     ) -> 2013/04/01 15:00:30 +00:00
2013-04-01T15:00:30.1234567+09:00   (RoundtripKind     ) -> 2013/04/01 15:00:30 +09:00
2013-04-01T15:00:30.1234567-05:00   (RoundtripKind     ) -> 2013/04/01 15:00:30 -05:00