在我的WPF .NET客户端应用程序中,我为当前的时间值分配了一个DateTime变量:
class MyClass
{
public DateTime CreatedDate {get; set;}
}
MyClass myClass = new MyClass();
myClass.CreatedDate = DateTime.Now;分配之后,我将对象发送到位于欧洲的WCF服务(,UTC+1),该服务将对象保存在数据库中。如果客户端和服务位于同一个TimeZone中,则没有问题。但是,如果我更改了TimeZone,例如,我的客户端在(UTC-6)和服务在(UCT+1)中,服务将读取CreatedDate值,因为它是服务so (UCT+1)上的DateTime.Now,而不是客户机上分配的(UCT-6)。如果在客户端(UTC-6)上设置(UTC-6),将服务中的31/10/2014 设置为20:00,则将其存储为(UTC+1),01/11/2014为01:00,这会影响到系统上的某些进程。
这不是我想要的行为,我希望服务总是存储客户端提交的日期。
我可以访问服务器和客户端的代码,当将CreatedDate赋值为:
myClass.CreatedDate = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Unspecified);没有运气。我能想到的唯一解决方案是使用字符串而不是DateTime,但这意味着代码中会有很多变化。有人知道如何忽略TimeZone设置吗?
发布于 2014-10-20 16:49:59
你有几种不同的选择:
DateTime,但使用UTC值而不是本地值。这意味着使用DateTime.UtcNow获取当前时间。
在客户端上,可以使用ToLocalTime生成一个显示值,将值从UTC转换为运行客户端代码的计算机的本地时区。DateTimeOffset。这可以确保在将值从客户端传输到服务器时,保留时区偏移量--这将告诉您特定时间戳离UTC有多远。
您可以使用DateTimeOffset.UtcNow或DateTimeOffset.Now获得当前时间。后者的优势是保留客户理解的本地时间。如果计划根据本地日期/时间对数据进行聚合分析,则需要这些信息。记住,“今天”对地球上的每个人来说都是不一样的。DateTime或DateTimeOffset,然后使用TimeZoneInfo类在服务器上进行转换。
不过,有一个“抓到”了。如果您传输处于DateTime模糊期的本地夏令时 (在“后退”转换期间),则可能会发生错误的转换。使用UTC或DateTimeOffset将避免此问题。还请参见对DateTime.Now的指控和DateTime对DateTimeOffset。
https://stackoverflow.com/questions/26467115
复制相似问题