如何在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对象中?

如何在SOAP请求的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或任何转换函数,如ToLocalTimeToUniversalTimeTimeZoneInfo中的类似方法。如果您决定使用本地时间,请非常小心,因为从服务器获取时区通常不是一个好主意。最好是用世界时来传送。

如果你只是用当前时间填充它,那么使用DateTime.UtcNow。如果从数据库中加载基于utc的DateTime,那么将DateTime.SpecifyKindDateTimeKind.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