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

WCF/.NET中的C#UTC DateTime查询

您应该使用DateTimeOffset结构,而不是使用DateTime结构。

DateTimeOffset结构捕获指定时间的偏移量(默认情况下它不是UTC,它由您的应用程序的范围定义,但最常见的偏移量是从UTC)以及日期/时间信息,并且这些信息将通过WCF调用(以及数据库,假设它支持该类型。在这种情况下,SQL Server从2008年起具有datetimeoffset数据类型)流动。

事实上,在几乎所有情况下,使用DateTimeOffset是处理日期/时间数据的首选方法。上一个链接的注释:

DateTimeOffset值的这些用法比用于DateTime值。因此,应考虑DateTimeOffset应用程序开发的默认日期和时间类型。

如果服务器的时区为里斯本/伦敦/都柏林时间,则不是UTC。当您在数据库中更新日期/时间值时,您可能希望更改服务器的时区,或者以UTC形式表示日期/时间。