«Использование DateTimeOffset
», как правило, хороший совет, но часть проблемы может быть, когда классы автоматически генерируются из WSDL (либо с WCF или .asmx), то xs:DateTime
типов в XSD создаются как получить DateTime
объектов. Так что - не могу.
К сожалению, для этого не было хорошего решения. Если вы на самом деле пытаетесь использовать DateTimeOffset
в своих моделях у источника, WSDL получает странный сложный объект. Если вы попытаетесь просто изменить принимающую сторону, она не может десериализовать xs:DateTime
в DateTimeOffset
.
Это слабость WCF, SOAP и XSD. Читайте больше в WCF DateTimeOffset compatibility.
Единственными обходными решениями при заполнении данных являются поля DateTime
, явно заданные как локальным, так и UTC. Вы можете использовать DateTime.SpecifyKind
или любую из функций преобразования, таких как ToLocalTime
, ToUniversalTime
или аналогичные методы от TimeZoneInfo
. Просто будьте очень осторожны, если вы решите использовать местное время, поскольку получение часового пояса с сервера обычно не является отличной идеей. Лучше всего передавать в терминах универсального времени.
Если вы просто заполняете его текущим временем, используйте DateTime.UtcNow
. Если вы загружаете базу данных DateTime
из UTC, используйте DateTime.SpecifyKind
с DateTimeKind.Utc
. Если у вас уже есть DateTimeOffset
, вы можете использовать свойство .UtcDateTime
, чтобы присвоить ему значение DateTime
в вашей модели.
Если DateTimeOffset
были поддержаны должным образом, то смещение может быть произвольным. Но поскольку это не так, вы ограничены тем, что можете выразить с помощью DateTimeKind
.
См. 'DateTimeOffset'. – Mitch
https://msdn.microsoft.com/en-us/library/system.datetimeoffset(v=vs.110).aspx –
Или попробуйте установить 'Вид'' DateTime' на локальный – AlexDev