首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Server 2008 R2和SQLServerCompact4中存储日期/时间数据的最佳方法

在Server 2008 R2和SQLServerCompact4中存储日期/时间数据的最佳方法
EN

Stack Overflow用户
提问于 2013-06-27 12:29:46
回答 3查看 12.4K关注 0票数 3

我们正在C# 4中开发一个应用程序,它使用Server 2008 R2作为后端。SQLServerCompact4也用于很少几种罕见情况下断开连接的客户端。我们想知道在这些数据库中存储日期/时间数据的最佳方法是什么,以便:

  1. 包含不同时差(来自不同时区)的数据可以很好地共存。这意味着要进行排序和比较。
  2. Server 2008 R2和SQLServerCompact4中的数据可以无缝地来回传输;这是一个不应影响所选设计的次要要求。

我们的主要关注点是为每个记录的事件保留本地时间,但不丧失比较和排序从不同时区生成的事件从而具有不同时间偏移的能力。

我们考虑了datetimeoffset数据类型,因为它存储时间偏移量,也因为它很好地映射到.NET的DateTimeOffset。但是,SQLServerCompact4不支持它。另一种方法是从数据库中删除偏移量信息,并使用简单的datetime数据类型,这样数据库中的每一段数据都可以标准化,使用Compact的问题也更少。然而,这带来了一个问题,即在用户看到数据之前,需要在检索时以某种方式重建偏移信息。

因此,我的问题是,对于如何在Server中存储日期/时间值,考虑到我们需要处理不同的时区,并使2008年R2和Compact4之间的互操作性尽可能容易,是否有最佳实践或指导方针?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-27 16:41:17

听起来相关的要点如下:

  • 您输入的数据非常适合DateTimeOffset
  • 您只关心特定时间的偏移量,因此不需要实时时区。(偏移量不是时区。)
  • 你确实关心原始的偏移量--你不能只是把所有的东西正常化到UTC,而完全忽略这个偏移量。
  • 您想查询本地时间。

在这种情况下,DateTimeOffset基本上是最合适的类型。您应该确保团队中的每个人都清楚这意味着什么--偏移量是数据最初接收时的偏移量。如果您想在不同的时区中及时显示该瞬间,则实际上需要返回UTC,并找出该显示时区中的偏移量。很容易对这类事情感到困惑:)

如果您需要完全保真度地维护SqlServerCE中的数据,您可能需要一个DateTime字段,然后需要一个单独的偏移字段(例如分钟,或者作为TimeSpan (如果SqlServerCE支持的话))。

票数 5
EN

Stack Overflow用户

发布于 2013-06-27 17:02:04

在服务器上使用DateTimeOffset可能是正确的。您可能还想在DateTime vs DateTimeOffset上阅读我的答案。

在您使用SQLCE的客户端上,使用UTC值存储一个DateTime。当您将数据发送到服务器时,可以使用客户端的本地时区来确定UTC值对应的DateTimeOffset

如果用户可能正在更改他们的时区,那么您可能还需要将时区的id存储在客户端数据库中。但是你可以在转换过程中使用这个。除非您在服务器或其他客户端上编辑这些值,否则不需要将其发送到服务器。

不要尝试将时间存储在客户端的本地时间。你会遇到异能。例如,当夏令时倒转时,您不希望相同的本地时间有两个不同的UTC时间。

票数 1
EN

Stack Overflow用户

发布于 2013-06-27 12:59:33

为什么不使用datetime并始终将值存储为UTC值,然后在需要时将其格式化为最终用户(显示)时区。

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

https://stackoverflow.com/questions/17343214

复制
相关文章

相似问题

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