【问题标题】:UTC time or local time stored in data store存储在数据存储中的 UTC 时间或本地时间
【发布时间】:2020-10-10 09:00:05
【问题描述】:

我有一个应用程序,它导入用户提供的 Excel 文件,该文件上传到 Azure Block 存储,并通过 Azure Functions(C# 中)处理数据,最后将数据保存到 Azure Table(如数据库表)中。

Excel 文件包含伦敦时间的时间列。该应用程序的用户仅位于英国。

在这种情况下,Excel文件中的时间应该转换为UTC时间还是保存到Azure Table时的原始时间?

一般而言,哪些因素决定时间必须保存为 UTC 时间还是本地时间?

更新

Azure Functions 托管在北欧。

默认情况下,Azure Table 似乎会以 UTC 时间自动保存 DateTimeOffset。也就是说,“6/2/2020 9:00:00 PM +01:00”保存为晚上 8 点,而不是晚上 9 点。

同样,当 Azure Functions 时区设置为“WEBSITE_TIME_ZONE”:“GMT 标准时间”时,“6/2/2020 9:00:00 PM +01:00”将保存为晚上 8 点而不是晚上 9 点

【问题讨论】:

  • 如果您在一个特定的位置工作,最好使用当地时间。简单更好。
  • 只要确保时间戳都与相同时区相关。不要混用时区。 UTC 是通用的,因此将其用作所有时间戳的时区当然也不错。但是如果你可以在加载数据时转换它,这意味着你也可以在以后转换它,如果你需要它在 UTC 中。所以你并没有真正失去任何东西。当然,除非您经常需要 UTC。然后转换一次并经常使用它可能会便宜一些。不过,您最常使用的任何其他时区也是如此。

标签: c# azure database-design architecture azure-storage


【解决方案1】:

最好的做法是尽可能以 UTC 格式存储日期和时间。如果将来将数据返回到另一个应用程序,那么您将一直在转换回 UTC 时遇到麻烦(大多数软件公司将使用 UTC 作为最佳实践)。

如果它是一个小规模的应用程序,你可能不太可能遇到这个问题,在这种情况下使用本地时间就足够了,但是你应该考虑这两个选项。

【讨论】:

  • 请您详细说明“如果将来将数据返回到另一个应用程序,您将在转换回 UTC 时遇到麻烦”。应用程序当前以 UTC 格式存储时间,为什么它会转换回 UTC?
  • 我们遇到了一个问题,我们在系统中存储了本地时间的时间戳(这些时间戳存在于数据库中的多个表中)。当我们与 Salesforce 集成时,他们需要调用我们的 api,这将返回与他们所拥有的时间不同的时间(因为他们使用 UTC)。结果是一次重大的数据清理和“我希望我们一开始就将其存储为 UTC”的时刻。
  • “最好的做法是尽可能以 UTC 格式存储日期和时间。”我请求不同。日期和时间是一个比我们大多数人意识到的要复杂得多的概念,在为本地化应用程序使用完整的 UTC 之前需要考虑很多事情,特别是如果所讨论的日期是未来的日期。
【解决方案2】:

我想指出,尽可能存储 UTC 的做法被认为是最佳做法,因为它大多数情况下都有效

但也有when it doesn't的情况。如果你想用你不知道的关于时间的事情给自己一个惊喜,请参阅this

因此,不要盲目地将日期时间存储在 UTC 中因为你在某处读过它。了解风险并确保您的应用程序不受影响或企业可以在继续之前接受任何风险。

Here 是微软关于在 .Net 框架中使用 Datetime 的最佳实践(注意,​​这篇文章有点旧,但仍然有价值)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 2013-10-07
    • 2011-06-06
    • 1970-01-01
    • 2016-09-06
    • 2011-04-17
    • 2019-02-01
    • 2012-07-17
    相关资源
    最近更新 更多