如何在SOAP请求的DateTime中添加时区信息
本文关键字:添加 时区 信息 DateTime SOAP 请求 | 更新日期: 2023-09-27 18:17:34
我有一个端点,它基于一些WSDL接收请求并构建响应对象,问题是我有一个DateTime字段,我必须用一个值填充它。当我用DateTime填充这个值。现在我在SoapUI中看到的是以下正确的内容:
2015 - 10 - 13 - t16:22:34.2701373 + 02:00
同时,当我用逻辑检索的DateTime填充字段时,我有这个是错误的:
2015 - 10 - 05 t11:40:08
因为我需要完整的信息,因为它在DateTime填充时返回。现在缺少什么,如何将其添加到DateTime对象中?
"Use DateTimeOffset
"通常是很好的建议,但是部分问题可能是当类从WSDL自动生成时(使用WCF或.asmx), XSD中的xs:DateTime
类型被创建为DateTime
对象。So - can't。
不幸的是,没有很好的解决方案。如果您实际尝试在源代码的模型中使用DateTimeOffset
,那么WSDL将得到一个奇怪的复杂对象。如果你试图改变接收端,它不能将xs:DateTime
反序列化成DateTimeOffset
。
这是WCF、SOAP和XSD的弱点。阅读更多关于WCF DateTimeOffset兼容性的信息。
填充数据时唯一的解决方法是将DateTime
字段显式地设置为本地或UTC类型。您可以使用DateTime.SpecifyKind
或任何转换函数,如ToLocalTime
、ToUniversalTime
或TimeZoneInfo
中的类似方法。如果您决定使用本地时间,请非常小心,因为从服务器获取时区通常不是一个好主意。最好是用世界时来传送。
如果你只是用当前时间填充它,那么使用DateTime.UtcNow
。如果从数据库中加载基于utc的DateTime
,那么将DateTime.SpecifyKind
与DateTimeKind.Utc
一起使用。如果你已经有一个DateTimeOffset
,那么你可以使用.UtcDateTime
属性在你的模型中给它分配一个DateTime
值。
如果DateTimeOffset
被正确支持,那么偏移量可以是任意的。但由于它不是-您被限制在您可以用DateTimeKind
表达的内容。
使用DateTimeOffset: https://msdn.microsoft.com/en-us/library/system.datetimeoffset(v=vs.110).aspx这将解决你的问题!
代码中填写的DateTime值的Kind属性应该等于Local或Utc.https://msdn.microsoft.com/en-us/library/system.datetime.kind(v=vs.110).aspx