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

C# UTC DateTime query in WCF/.NET

这是一个非常简单的(希望)问题。我不熟悉.NET中的DateTime转换。

我有一个具有DateTime属性的WCF服务 - 称之为BookingDate。

有人以下列格式将其传递给我的WCF服务:

1
2012-03-26T17:03:00-04:00</a:BookingDate>

它所在的服务器设置为UTC时区(里斯本,伦敦,都柏林)。

当我将相应的值存储在数据库中时,它将值设置为:

1
2012-03-26 22:03

我假设,我认为不正确的.NET框架(作为WCF序列化/反序列化过程的一部分)会将此突然显示为UTC的.Net日期时间(因为上面有4小时的负偏移量)

我在期待:2012-03-26 21:03

我的问题是:我需要打电话:

1
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是处理日期/时间数据的首选方法。 请注意上一个链接:

These uses for DateTimeOffset values are much more common than those
for DateTime values. As a result, DateTimeOffset should be considered
the default date and time type for application development.


如果您的服务器时区位于里斯本/伦敦/都柏林时间,那么它不是UTC。 您需要更改服务器的时区,或者在数据库中更新时以UTC格式表示日期/时间值。