Я пытаюсь объяснить несколько вещей;
У меня есть объект DateTime, для которого требуется параметр с часовым поясом .
Нет, вы не.
A DateTime
не имеет любой неявный формат. Он просто имеет значения даты и времени. Концепция «Формат» только применяется, когда вы ее получили textual (aka string
) Представление. Таким образом, у вас может быть строка со смещенной частью, но не DateTime.
но когда я преобразовать его обратно в DateTime часовой пояс получает удален автоматически ..
И сама DateTime
не содержит информации в реального часового пояса. Это may знает, если это UTC
или Local
, но не что местное действительно значит. Также DateTimeOffset
не имеет информации о часовом поясе. У него просто есть DateTime
и UTC Offset. Но этой информации недостаточно для определения часового пояса с разных временных интервалов. может иметь такое же смещение.
Но если вы действительно хотите произвести "2016-03-01T10:00:00-06:00"
вход, я могу предоставить 2 способа даже Я не предлагаю;
Genereate связанные DateTime
экземпляра на основе этого значения, установите часовой пояс системы, которая за 6
часов как offfset часть (с помощью zzz
format specifier не рекомендуется для DateTime, которые не относятся Kind
собственности) и форматировать DateTime
как;
DateTime dt = new DateTime(2016, 3, 1, 10, 0, 0);
Console.WriteLine(dt.ToString("yyyy-MM-ddTHH:mm:sszzz"));
// 2016-03-01T10:00:00-06:00
Генерация DateTimeOffset
экземпляра на основе этого DateTime и компенсации части, после форматирования это нравится;
var dto = new DateTimeOffset(dt, TimeSpan.FromHours(-6));
Console.WriteLine(dto.ToString("yyyy-MM-ddTHH:mm:sszzz"));
// 2016-03-01T10:00:00-06:00
для api использует сам datetime. И когда вам нужно использовать смещение, используйте DatetimeOffset. –
Нет, вы правы –