WCF/.NET中的C#UTC DateTime查询
本文关键字:DateTime 查询 C#UTC 中的 NET WCF | 更新日期: 2023-09-27 18:29:07
这是一个非常简单的问题。我是在.NET.中处理DateTime转换的新手
我有一个WCF服务,它有一个DateTime属性,称之为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
您应该使用DateTimeOffset
结构,而不是使用DateTime
结构。
DateTimeOffset
结构捕获指定时间的偏移量(默认情况下它不是UTC,它由您的应用程序的范围定义,但最常见的偏移量是从UTC)以及日期/时间信息,并且这些信息将通过WCF调用(以及数据库,假设它支持该类型。在这种情况下,SQL Server从2008年起具有datetimeoffset
数据类型)流动。
事实上,在几乎所有情况下,使用DateTimeOffset
是处理日期/时间数据的首选方法。上一个链接的注释:
DateTimeOffset值的这些用法比用于DateTime值。因此,应考虑DateTimeOffset应用程序开发的默认日期和时间类型。
如果服务器的时区为里斯本/伦敦/都柏林时间,则不是UTC。当您在数据库中更新日期/时间值时,您可能希望更改服务器的时区,或者以UTC形式表示日期/时间。