1

我正在从 Excel 查询一个(.net)Web 服务(从反冲中获取掩护),它返回一个日期数组。我注意到当天边界上的任何日期都会向前移动 1 小时,我已经检查了服务器上的 Web 服务,并且原始日期是正确的。

然后,我使用 Fiddler 在客户端计算机上查看呼叫,并且在午夜的日期末尾有一个 Z(将其标记为 UTC),而所有其他日期时间都没有。

UPDATE 上面的说法是错误的,用Z标记的是第一个和最后一个日期,与时间无关。其余的是正确的,客户端只调整了第一个和最后一个日期

我认为 SOAP 然后将其从 UTC 更改为本地(BST),因此增加了一个小时。

我的问题是如何阻止 Z 被添加到这些日期(或将其更改为本地)?

我检查了 IIS 7.5 中的文化,它设置为 en-GB,服务器设置为 UK。

4

1 回答 1

1

这有点繁琐,这不是一个真正的答案,但应该给你一些尝试的东西。

一种方法可能是删除偏移量。我没有要拥有的代码,但在类似伪代码中它可能是

TimeZone tz = GlobalizationNamespace.GetTimeZone("Greenwich Mean Time");
SomeDateTimeNoOffset = SomeDateTime.AddHours(tz.GetUtcOffset(SomeDateTime));

这可能会阻止服务将 Z 放在末尾,因为它没有 TimeZone 偏移量。

另一种选择是将服务合同中的属性公开为字符串

public string DateTimeNoTzInfo
{
   get { DateTime.ToString('yyyy-MM-ddThh:mm:ss.ttttt') }
}
于 2012-04-30T11:28:00.150 回答