Это неловко. Сначала вам нужно разобрать его соответствующим образом, а затем отформатировать соответствующим образом ... проще всего пройти через DateTimeOffset
. (Я предполагаю, что вы хотите, чтобы входная строка обрабатывалась так, как если бы она была в формате UTC? Вы не сделали этого ясно.)
Вы можете использовать DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal
, чтобы получить значение UTC после шага Parse
. Затем вы можете создать DateTimeOffset
из этого значения DateTime
, поэтому смещение будет равно 0.
Если у вас фиксированный формат ввода, я бы настоятельно посоветовал бы использовать DateTime.ParseExact
вместо DateTime.Parse
тоже. (На самом деле, я бы посоветовал вам использовать Noda Time вместо этого, но это другой вопрос ...)
Пример кода:
using System;
using System.Globalization;
class Test
{
static void Main()
{
var parsed = DateTime.ParseExact("2012-03-15 12:49:23",
"yyyy-MM-dd HH:mm:ss",
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal |
DateTimeStyles.AdjustToUniversal);
var dtOffset = new DateTimeOffset(parsed);
var output = dtOffset.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz",
CultureInfo.InvariantCulture);
Console.WriteLine(output);
}
}