在数据库中存储日期时间?

时间:2010-05-25 16:13:38

标签: asp.net sql datetime

我正在写博客,想在东部时区展示我的帖子。我认为存储所有UTC都是正确的方法。这会带来一些挑战:

  1. 我必须将所有时间从UTC转换为东部。这不是一个大问题,但增加了很多代码。

  2. 而“biggie”就是我通过传递查询ala blogger来使用短日期时间来引用帖子。问题是没有办法将短日期时间转换为正确的UTC日期,因为我缺少公布的时间信息。

  3. 嗯,在东部时间存储所有日期有什么问题吗?这肯定会使应用程序的其余部分更容易,但如果我需要更改时区,一切都会被存储错误。

    更新

    @Jon,非常重视您的专业知识,但我已经决定将UTC时间存储在数据库中是错误的。不过,你可能会说服我!

    所以,让我给你一个完整的瘦身。我将所有时间都转换为UTC,这需要在代码的声明部分中添加更多“语法”。

    我编码的是博客,所以我有2条路线,一条列表路线和一条详细路线。详细信息路径需要较短的日期,并且帖子的名称假设组合为唯一。这就是它崩溃的原因。我在查询中传递了短路线。

    根据时间的不同,我们可以回滚以使其为29或30.所以短日期必须正确,因为我在查询中没有足够的信息来确定如何将东部时间转换回UTC

    我存储了一个DatePosted“短日期”,所有时间都是@ 12 AM用于SQL目的和FirstModified长日期。所以,我说,没问题,我只会将短日期存储在东部,然后将长日期转换为东部。不行,因为我不能让这些查询工作。

    所以,我觉得我错了。日期应始终存储在东部时间(我想要使用的时间)。然后,如果用户想要更改时区(不是要求),我们只需浏览所有条目并进行更改。

    也许,我在考虑这个错误,但在我的情况下,只会使用东部时区,所以无论如何都浪费时间。

    期待对此有任何意见!

    关键问题:

    1. 我在查询中传递了一个短日期。如果这个短日期是UTC,那么查询中的日期可能会被关闭1.如果我将短日期作为东方传递,那么我将需要一个linq-to-sql语法,可以转换为SQL,这将允许我比较日期不同时区的时间。
    2. 再次感谢您的帮助!

4 个答案:

答案 0 :(得分:5)

将时间从UTC转换为东部时间不应添加“大量代码”。它应该是一个单行的。

我不确定你的第二点是什么意思 - 如果你详细说明它会有所帮助。如果您不知道所涉及的时区,您怎么能理解查询?如果您实际上假设它在东部时间,那么您可以进行适当的UTC转换。

一直使用本地时间通常是一个坏主意。如果你只涉及一个时区,那么它不会坏,但如果你想要使用其他时区,那就太可怕了。 (这不仅仅是批量更新数据库的问题 - 它将是在整个应用程序中检查每一次使用日期的情况。)

转到UTC选项,IMO。

答案 1 :(得分:2)

这只是一个博客,而不是世界各地办事处使用的商业网络应用程序,所以我说继续使用东部时间。

如果您曾更改时区,并希望显示新时区,则一个SQL更新语句可以始终更新到新区域。

答案 2 :(得分:0)

以UTC格式存储时间并将其转换为您的视图/页面/无论是东方,还是更好,转换为客户端的本地时间。

此外,正如其他人所说,将UTC转换为东部时间不应该需要“大量代码”,因为您基本上可以减少一些时间,同时保持对夏令时的轻微意识。

例如,考虑

DateTime currentServerTime = DateTime.UtcNow.ToLocalTime(); 

答案 3 :(得分:0)

以UTC格式将值存储在db中,然后在客户端转换为本地时间。这样,每个客户都可以在本地参考框架中查看时间,而您无需关注特定的时区。