3

目前正在讨论存储日期的最佳方式,并希望有经验的评论 - 寻找“为什么”而不是“如何”。

设想:

我们正在开发一个允许客户(跨多个时区)创建事务数据的系统。在注册时,客户将指定他们的时区。系统的很大一部分围绕着客户端运行日期和时间相关的交易数据报告。

我们已经阅读了许多关于存储交易日期字段的最佳方式的问题和评论,大多数人说存储为 UTC,然后执行各种与日期和时间相关的函数来计算不同时区的时间,以便运行选择报告。

我们的问题是 - 为什么要费尽心思存储在 UTC 中 - 将日期存储在 UTC 有什么好处。从我们的角度来看,我们有客户指定的时区,因此如果我们将日期/时间存储在他们正确的时区中,那么这是我们对每笔交易运行一次的计算 - 此后他们的所有报告都将在没有任何日期转换计算的情况下工作。

由于我们阅读的大多数问题和评论都提到了“如何”,我们认为必须有一些关于“为什么”的东西我们错过了。

因此,总而言之,在我们做出决定之前,我们是否遗漏了一些东西 - 是否有绝对的“必须将日期存储为 UTC”的原因?

感谢阅读 - 任何评论表示赞赏。

4

3 回答 3

1

为什么要费尽心思存储在 UTC 中?

在 UTC 中存储时间没有问题。如果日期时间字段都在同一个时区,IMO 更容易维护它们,而不是表的每条记录都在不同的时区并且与user表的关系告诉您该字段在哪个时区(甚至荒谬的方法是存储偏移量+02:00,如额外字段)。

在注册时,客户将指定他们的时区。

想一想当您添加功能时会发生什么:

  • 如果用户在那里更改时区怎么办?
  • 如果您将升级您的系统,用户可以为每个请求提供时区怎么办?
  • 等等

是否有绝对的“必须将日期存储为 UTC”的原因?

没有;这完全取决于您的设计。你所选择的就是你所使用的;想想什么对你来说更容易,对于未来的升级等等。

于 2013-09-25T11:21:09.790 回答
0

不,在我看来,这没有“必须”!这完全是一个设计问题,您选择使用什么将决定事情的工作方式,无论哪种情况,这只是一个参考问题,建议使用 UTC 的人,是因为它是众所周知和经过验证的参考,无论您的程序有多大或您的客户在哪里,参考总是在那里,但是如果您使用另一个时区,事情会以同样的方式工作,但您选择的时区将是参考,这可能在某些情况下会引起误解,但在受控环境中仍然是完全一样的。我希望我回答了你的问题。

于 2013-09-25T10:57:42.130 回答
0

在我看来,最好将日期/时间作为 unix 值存储在数据库中。然后,您有一个确切的数字,可以很容易地使用存储的时区或其他方式轻松操纵以显示,而且至关重要的是,如果您决定更改其呈现方式,它将很快改变。

于 2013-09-25T11:09:05.597 回答