这是一个非常简单的(希望)问题。我是刚接触.NET中的DateTime转换的新手。
我有一个具有DateTime属性的WCF服务-将其称为BookingDate。
有人将其以以下格式传递给我的WCF服务:
<a:BookingDate>2012-03-26T17:03:00-04:00</a:BookingDate>
它所在的服务器设置为UTC的时区(里斯本,伦敦,都柏林)。
当我在数据库中存储相应的值时,它将值设置为:
2012-03-26 22:03
我以为我错误地认为.NET框架(作为WCF序列化/反序列化过程的一部分)会将其弹出到UTC的.Net Datetime中(因为上面有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
最佳答案
代替使用DateTime
structure,应使用DateTimeOffset
structure。DateTimeOffset
结构捕获指定时间的偏移量(默认情况下不是UTC,它是由应用程序的范围定义的,但最常见的偏移量是UTC)以及日期/时间信息,该信息将流通过WCF调用(以及假定支持该类型的数据库)。在这种情况下,SQL Server从2008年开始具有datetimeoffset
data type。
事实上,using DateTimeOffset
is the preferred methods of dealing with date/time data in almost all situations。从上一个链接注意:
DateTimeOffset值的这些用法比这些用法更常见
用于DateTime值。因此,应考虑DateTimeOffset
应用程序开发的默认日期和时间类型。
关于c# - WCF/.NET中的C#UTC日期时间查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9878560/