Поскольку вы смещения тоже можно использовать DateTimeOffset.Parse(), чтобы получить DateTimeOffset. Оттуда вы можете прочитать свойство DateTime. Выходная переменная дт будет иметь 2014-11-17 7:00:00 PM с DateTimeKind собственности установлен в положение «Не выбрано»
var dtOffset = DateTimeOffset.Parse("2014-11-17 19:00:00-0500", CultureInfo.InvariantCulture);
var dt = dtOffset.DateTime;
DateTimeOffset представляет собой точку во времени. Обычно это относится к UTC. Таким образом, это естественная структура для первоначального анализа полей, которые у вас есть.
Если вы хотите получить ссылку на одно и то же время в UTC, вы можете использовать это. Здесь выходная переменная дт будет 2014-11-18 12:00:00 AM с DateTimeKind собственности установлен в «Utc»
var dt = DateTime.Parse("2014-11-17 19:00:00-0500", CultureInfo.InvariantCulture).ToUniversalTime();
Если у вас нет смещения, но только имеют timeZoneId, вы можете сделайте это, но для этого вам понадобится NodaTime.
Попробуйте NodaTime для этого - http://nodatime.org/ – govin