C # UTC DateTime запрос в WCF / .NET - PullRequest
3 голосов
/ 26 марта 2012

Это очень простой, (надеюсь) вопрос.Я новичок в работе с преобразованием DateTime в .NET.

У меня есть служба WCF, у которой есть свойство DateTime - назовите его BookingDate.

Кто-то передает это моей службе WCF в формате:

<a:BookingDate>2012-03-26T17:03:00-04:00</a:BookingDate>

Сервер, на котором он сидит, настроен на часовой пояс UTC (Лиссабон, Лондон, Дублин).

Когда я сохраняю соответствующее значение в базе данных, он устанавливаетзначение должно быть:

2012-03-26 22:03

Я предположил, я неправильно думаю, что .NET Framework (как часть процесса сериализации / десериализации WCF) поместит это в .Net Datetime UTC для меня (как тамминус смещение 4 часа, как указано выше)

Я ожидал: 2012-03-26 21:03

Мой вопрос таков: мне нужно было бы позвонить:

var date = fromClientWCFService.BookingDate.ToUniversalTime();

вчтобы получить ожидаемое время 21:03?

Если нет, есть ли настройка WCF, чтобы сообщить моей службе преобразовывать DateTimes в UTC, а не часовой пояс сервера?

Спасибозаранее

Марка

РЕДАКТИРОВАТЬ:

Из 1 ответа я вижу, что DateTimeOffset можно использовать.Исходя из этого, будет работать следующее: var offset = DateTimeOffset.Parse("2012-03-26T17:03:00-0400");, чтобы вернуть результат: 2012-03-26 21:03

Ответы [ 2 ]

3 голосов
/ 26 марта 2012

Вместо использования структуры DateTime следует использовать структуру DateTimeOffset .

Структура DateTimeOffset фиксирует смещение от указанного времени (по умолчанию это не UTC, оно определяется областью действия вашего приложения, но наиболее распространенным смещением будет UTC) вместе с с информацией о дате / времени, и эта информация будет передаваться через вызовы WCF (а также в базу данных, при условии, что она поддерживает тип. В этом случае SQL Server имеет тип данных datetimeoffset с 2008 г.).

На самом деле с использованием DateTimeOffset является предпочтительным методом обработки данных даты / времени почти в всех ситуациях . Примечание по предыдущей ссылке:

Эти значения значений DateTimeOffset встречаются гораздо чаще, чем для значений DateTime. В результате DateTimeOffset следует учитывать тип даты и времени по умолчанию для разработки приложений.

0 голосов
/ 26 марта 2012

Если часовой пояс вашего сервера установлен на время Лиссабона / Лондона / Дублина, это не UTC. Вам нужно либо изменить часовой пояс вашего сервера, либо указать значение даты / времени в форме UTC при обновлении его в базе данных.

...