タイムゾーン・時刻の種類に関するオプションのうち、AssumeLocalおよびAssumeUniversalは文字列中の日時がどのタイムゾーンも表さない場合にローカル時刻もしくはUTCと見なすように指定するオプションです。 当然、オフセット値が指定されている場合は、その値が使用されます。

DateTime/DateTimeOffset.ParseExactメソッドでDateTimeStylesを指定し、時刻をローカル時刻またはUTCとみなして変換する
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.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.AssumeLocal,       // 時刻はローカル時刻とみなす
      DateTimeStyles.AssumeUniversal,   // 時刻はUTCとみなす
    };

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

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

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

          Console.WriteLine("{0,-35} ({1,-15}) -> {2}", input, style, dto);
        }
        catch (FormatException) {
          Console.WriteLine("{0,-35} ({1,-15}) -> (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.1234567         (AssumeLocal    ) -> 2013/04/01 15:00:30 (Local)
2013-04-01T15:00:30.1234567         (AssumeUniversal) -> 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+00:00   (AssumeLocal    ) -> 2013/04/02 0:00:30 (Local)
2013-04-01T15:00:30.1234567+00:00   (AssumeUniversal) -> 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+09:00   (AssumeLocal    ) -> 2013/04/01 15:00:30 (Local)
2013-04-01T15:00:30.1234567+09:00   (AssumeUniversal) -> 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-05:00   (AssumeLocal    ) -> 2013/04/02 5:00:30 (Local)
2013-04-01T15:00:30.1234567-05:00   (AssumeUniversal) -> 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.1234567         (AssumeLocal    ) -> 2013/04/01 15:00:30 +09:00
2013-04-01T15:00:30.1234567         (AssumeUniversal) -> 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+00:00   (AssumeLocal    ) -> 2013/04/01 15:00:30 +00:00
2013-04-01T15:00:30.1234567+00:00   (AssumeUniversal) -> 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+09:00   (AssumeLocal    ) -> 2013/04/01 15:00:30 +09:00
2013-04-01T15:00:30.1234567+09:00   (AssumeUniversal) -> 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-05:00   (AssumeLocal    ) -> 2013/04/01 15:00:30 -05:00
2013-04-01T15:00:30.1234567-05:00   (AssumeUniversal) -> 2013/04/01 15:00:30 -05:00