【发布时间】:2008-11-03 15:35:54
【问题描述】:
我们正在运行一个调度应用程序,它调用 WCF 服务来运行夜间作业。其中大量包括有关当前营业日期的信息。出于业务原因,调度服务器设置为 GMT,但我们的服务在设置为纽约时间的服务器上运行。
这引发了一个问题;日期将通过明确的时区信息传递给我们的 .NET 服务。因此,当服务告诉应用程序以“2008-11-03 00:00:00 +0:00”的日期运行时,服务会将其解释为“2008-11-02 19:00:00 -5:00” "而且事情的日期是错误的。
调度器的行为是第三方硬编码的,所以我们不能告诉调度器忽略时区偏移。我们不想总是将日期转换为 GMT,因为我们的亚洲办事处很有可能会调用相同的服务,而我们又会遇到同样的问题。
有没有办法标记 DataContract,甚至将其控制在足够低的级别以确保 DateTime Kind 是未指定的?或者有没有办法使用 DateTime 来确定用于创建它的原始信息是什么,并在后处理步骤中将其转换回原始值?
如果有帮助,现在我们的合同相当简单。方法采用一个参数,该参数是从下面的类派生的类。
[DataContract]
public class BaseTimeSensitiveParameters
{
[DataMember] public DateTime? BusinessDate;
}
【问题讨论】:
-
如果要将调度服务器设置为 GMT,请将操作系统时区设置为 GMT。