来自webservice的日期转换问题
我正在使用Web服务,它将返回响应对象中的datetime字段。
我的reference.cs文件有,
private System.DateTime timestampField; public System.DateTime Timestamp { get { return this.timestampField; } set { this.timestampField = value; } }
在SOAP UI中,当我调用该服务时,我看到它正在返回2014-06-09T21:24:56+00:00
00,2014-06-17T05:42:00-04:00
我对不同的值有不同的偏移量..
但是从我的.NET应用程序,当我调用它转换为其他值时,如6/9/2014 5:24:56 PM
但它的实际值应该是6/9/2014 9:24 pm
。
我怎样才能解决这个问题?
当您使用使用xsd:dateTime
的SOAP Web服务时,Visual Studio将始终使用DateTime
创建客户端代理类。
这种情况很糟糕,但处理它的最简单方法是使用.ToUniversalTime()
转换回UTC,或使用TimeZoneInfo
对象转换为另一个时区。
由于隐藏的“第4种” ,您可以安全地从本地转换回UTC而不会产生歧义。 (与原始值的偏移将消除歧义。)
据我所知,没有办法让它来创建一个DateTimeOffset
。 那将是理想的。 但是,如果你真的想深入了解,你可能会完全忽略偏移 – 虽然这不一定是最好的主意。
此外,值得一提的是,如果您尝试创建自己的服务并直接公开DateTimeOffset
类型,则会遇到问题。 没有从DateTimeOffset
到xsd:dateTime
或SOAP使用的任何其他XML Schema数据类型的映射。 相反,您在架构中获得自定义复杂类型,并且数据根本不会传递。 在客户端上,您将获得一个根本不执行任何操作的YourServiceReference.DateTimeOffset
对象,而不是接收System.DateTimeOffset
。 这很不幸,因为在面向公众的API中使用DateTimeOffset
应该是很好的建议,但它根本不起作用。 至少不适用于SOAP / XML。 REST / JSON世界中的事情要好得多。
这就是我所做的,不确定它是否是有效的方式..
我对不同的时间值有不同的偏移值,我不知道时间字段值的时区…我做的是
我将时间字段值转换为字符串并使用子字符串获取偏移量并将其应用于时间字段值的UTC
上述就是C#学习教程:来自webservice的日期转换问题分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
TimeSpan offSetSpan = new TimeSpan(); string dt = TimestampValue; string offset = TimestampValue.Substring(trackevent.Timestamp.Length - 6,6); if (offset != "+00:00" && offset != "-00:00") { offSetSpan = TimeSpan.Parse(offset.Trim()); } Console.WriteLine("Offset Timestamp: {0}", Convert.ToDateTime(TimestampValue).ToUniversalTime() + offSetSpan);
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1021666.html