Z
на вашем вводе указывает время UTC, но поведение по умолчанию Convert.ToDateTime
заключается в преобразовании результата в локальное время. Если вы посмотрите на результат Convert.ToDateTime("2016-03-30T17:15:25.879Z").Kind
, вы увидите, что это Local
.
Я предлагаю использовать DateTime.ParseExact
, где вы можете указать поведение, которое хотите, например. сохраняя время UTC:
var dateTime = DateTime.ParseExact(
"2016-03-30T17:15:25.879Z",
"yyyy-MM-dd'T'HH:mm:ss.FFF'Z'",
CultureInfo.InvariantCulture,
DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal);
Console.WriteLine(dateTime); // March 30 2016 17:15 (...)
Console.WriteLine(dateTime.Kind); // Utc
Вы можете затем преобразовать это значение в строку, но вы хотите.
Конечно, я действительно предлагают использовать мой Noda Time проект вместо этого, где бы разобрать либо к Instant
или ZonedDateTime
, который знал бы это в формате UTC ...IMO, DateTime
is simply broken, именно из-за проблем, которые вы видели.
Вы проверили, соответствует ли полученное значение DateTime? Значение Convert.ToDateTime («2016-03-24T17: 15: 25.879Z»)? Если это неверно, это из-за ваших текущих настроек локали. – RvdK