2016-06-23 3 views
6

Я использую API-интерфейс саблевого мыла для бронирования рейса.Как разобрать часовую зону с параметром datetime до datetime

У меня есть объект DateTime, для которого требуется параметр с часовым поясом. Вход должен быть как "2016-03-01T10:00:00-06:00"

На данный момент я получаю значение как

DateTime dt = DateTime.UtcNow; 
string date = dt.ToString(); 
string tstamp = dt.ToString("mm-dd-yyyyTHH:mm:sszzz"); 
DateTimeOffset tstamp = DateTimeOffset.Parse(date); 
DateTime datetime = tstamp.DateTime; 

но когда я преобразовать его обратно в DateTime часовой пояс получает автоматически удаляется. Я не могу преобразовать объект в DateTimeoffset, потому что API требует его в формате DateTime.

+0

для api использует сам datetime. И когда вам нужно использовать смещение, используйте DatetimeOffset. –

+0

Нет, вы правы –

ответ

2

Я думаю, что это могло бы помочь вам, можно получить нужную дату, или вы получите смещение как TimeSpan, а затем добавьте его в свое datetime, если необходимо, или сохраните его.

Edit: теперь я вижу, что вы, возможно, просто нужно, чтобы получить строку из объекта DateTimeOffset, а не из объекта DateTime.

DateTime dt = DateTime.UtcNow; 
string date = dt.ToString(); 
string tstampString = dt.ToString("MM-dd-yyyyTHH:mm:ssZZZ"); 

DateTimeOffset tstampDT = DateTimeOffset.Parse(date); 

DateTime datetimeCurrent = tstampDT.DateTime; 
DateTime datetimeUTC = tstampDT.UtcDateTime; 
DateTime datetimeLocal = tstampDT.LocalDateTime; 
TimeSpan offsetFromUTC = tstampDT.Offset; 

редактировать:

string tstampOffsetString = tstampDT.ToString("MM-dd-yyyyTHH:mm:sszzz"); 
+1

Несколько вещей; В качестве спецификатора пользовательского формата нет 'ZZZ'. Эти пользовательские спецификаторы чувствительны к регистру. Даже если вы упомянете спецификатор 'zzz', он не рекомендуется использовать его с' DateTime', поскольку он отражает смещение временной шкалы системы для DateTime. Он не связан с собственностью «Kind». Создание 'DateTimeOffset' на основе' DateTime' не так уж и достаточно, потому что вы должны указать часть UTC Offset, если хотите создать '-06: 00' в результате с помощью спецификатора' zzz'. –

+0

Спасибо, вы правы, я положил ZZZ, потому что меня предупреждали не использовать 'z' с DateTimeInvelidLocalFormat, вне курса в моем коде: tstampString = "06-23-2016T12: 12: 57ZZZ" и tstampOffsetString = "06- 23-2016T12: 12: 57 + 02: 00 « –

+0

-06: 00 - это просто пример. – kirushan

0

Я пытаюсь объяснить несколько вещей;

У меня есть объект 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 
+0

@ Даунвотеры стараются, по крайней мере, прокомментировать, чтобы я мог видеть, где я? –

Смежные вопросы