我们有一个运行的调度应用程序调用WCF服务来运行夜间作业.其中大量包括有关当前营业日期的信息.出于商业原因,调度服务器设置为GMT,但我们的服务在设置为纽约时间的服务器上运行.
这引起了一个问题; 日期将通过显式时区信息传递给我们的.NET服务.因此,当服务告诉应用程序以"2008-11-03 00:00:00 +0:00"的日期运行时,服务会将其解释为"2008-11-02 19:00:00 -5:00" "事情与错误的日期有关.
调度程序行为是第三方和硬编码的,因此我们无法告诉调度程序省略时区偏移.我们不希望总是将日期转换为GMT,因为我们的亚洲办事处很可能会调用相同的服务,我们将回到同样的问题.
有没有办法标记DataContract,甚至控制它在足够低的水平,以确保DateTime种类将是未指定的?或者是否有一种方法使用DateTime来确定用于创建它的原始信息是什么,并在后处理步骤中将其转换回原始值?
如果它有帮助,那么我们现在的合同相当简单.方法采用一个参数,该参数是从下面的类派生的类.
[DataContract]
public class BaseTimeSensitiveParameters
{
[DataMember] public DateTime? BusinessDate;
}
Run Code Online (Sandbox Code Playgroud)
如果我正确理解问题,您可以通过简单地DateTime.ToUniversalTime()
在服务端使用来在后处理中解决此问题。对于您的示例,这应该为您提供一个值为“2008-11-03 00:00:00”且 Kind=DateTimeKind.Utc 的 DateTime。现在,如果您需要相同的值,但作为“本地”或“未指定”,则可以使用DateTime.SpecifyKind(DateTime, DateTimeKind)
设置“种类”而不更改该值。
归档时间: |
|
查看次数: |
7112 次 |
最近记录: |