[英]Time zone mess using WCF
我有一个SaaS系统,在世界范围内有多个客户。 但是,每个客户端仅处于一个时区。 客户端和中央服务器之间的通信是使用WCF完成的。
现在系统有一个调度方面,必须根据本地时间来存储时间。 但是我发现,当我通过WCF接口发送带有DataContract
属性标记的类,具有DateTime
类型的DataMember
属性时,系统变得太聪明了一半,并将时间转换为服务器时间。 OTOH,如果我直接通过WCF接口将DateTime值作为参数传递,则时间逐字记录,即客户端时间。
这让我很头疼。 我可以在某处进行配置,以便WCF服务不会将任何时间转换为本地(服务器)时间吗?
编辑:好吧,我不知道我做了什么,但是我正在研究一些相关的东西,而问题似乎根本就消失了! 因此,我很想尝试您的答案,但实际上我现在无法重现自己的问题...如果我有时间参加学术练习,我会看起来更深,但是现在,如果它没有破裂...
我知道这是一个老问题,但是如果有人需要,这里是:
我想您在客户端执行DateTime.Now
。 代替使用此语句,请使用:
DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Unspecified)
它获取客户端的本地dateTime,并且不会在服务器中更改。
尝试使用DateTimeOffset对象-时区偏移也会被存储,如果时间被转换,您应该能够将其转换回去。 您需要.NET 3.5或更高版本。
由于DateTimeOffset和DateTime无法相互转换(可以转换),因此您将不得不稍微更改代码。
您不必更改存储过程调用,但是如果发现需要,则SQL Server中也存在DateTimeOffset。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.