首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按客户端分配的方式将.NET DateTime值保存在服务器中

按客户端分配的方式将.NET DateTime值保存在服务器中
EN

Stack Overflow用户
提问于 2014-10-20 13:42:13
回答 1查看 159关注 0票数 1

在我的WPF .NET客户端应用程序中,我为当前的时间值分配了一个DateTime变量:

代码语言:javascript
复制
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赋值为:

代码语言:javascript
复制
myClass.CreatedDate = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Unspecified);

没有运气。我能想到的唯一解决方案是使用字符串而不是DateTime,但这意味着代码中会有很多变化。有人知道如何忽略TimeZone设置吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-20 16:49:59

你有几种不同的选择:

  • 将所有内容保持为DateTime,但使用UTC值而不是本地值。这意味着使用DateTime.UtcNow获取当前时间。 在客户端上,可以使用ToLocalTime生成一个显示值,将值从UTC转换为运行客户端代码的计算机的本地时区。
  • 切换到DateTimeOffset。这可以确保在将值从客户端传输到服务器时,保留时区偏移量--这将告诉您特定时间戳离UTC有多远。 您可以使用DateTimeOffset.UtcNowDateTimeOffset.Now获得当前时间。后者的优势是保留客户理解的本地时间。如果计划根据本地日期/时间对数据进行聚合分析,则需要这些信息。记住,“今天”对地球上的每个人来说都是不一样的。
  • 如果您有另一种方式来通信客户端的时区,或者您已经从外部信息中知道了这一点,那么您可以发送DateTimeDateTimeOffset,然后使用TimeZoneInfo类在服务器上进行转换。 不过,有一个“抓到”了。如果您传输处于DateTime模糊期的本地夏令时 (在“后退”转换期间),则可能会发生错误的转换。使用UTC或DateTimeOffset将避免此问题。

还请参见对DateTime.Now的指控DateTime对DateTimeOffset

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26467115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档