代码之家  ›  专栏  ›  技术社区  ›  Curtis White

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

  •  3
  • Curtis White  · 技术社区  · 15 年前

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

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

    2. “大问题”是我通过传递一个查询来使用一个短的日期时间来引用这些帖子,ala blogger。问题是无法将短日期时间转换为正确的UTC日期,因为我缺少发布的时间信息。

    嗯,只在东部时间存储所有日期有什么问题吗?这当然会使应用程序的其余部分更容易操作,但是如果我需要更改时区,所有内容都会存储错误。

    更新

    @乔恩,非常重视你的专业知识,但我认为在数据库中存储UTC时间是错误的。不过,你也许可以说服我,否则!

    所以,让我给你一个完整的皮包。我一直将代码转换为UTC,这需要在代码的声明性部分添加更多的“语法”。

    我正在编写的是一个博客,所以我有两条路线,一条列表路线和一条详细路线。详细信息路由采用一个短日期和邮件的名称,该名称假定组合是唯一的。这就是它崩溃的原因。我通过了查询中的短路线。

    根据一天中的具体时间,我们可以在29或30岁的时候进行包装。所以短日期必须是正确的,因为查询中没有足够的信息来确定如何将东部时间转换回UTC。

    我存储了一个日期发布的“短日期”,所有时间都是@12 AM,用于SQL目的,第一个修改的长日期用于此时间。所以,我说,好吧,没问题,我将把短日期存储在东方,然后把长日期转换为东方。不去,因为我不能让那些查询工作。

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

    也许,我认为这是错误的,但在我的例子中,只有东部时区被使用过,所以这两种方式都是浪费时间。

    期待对此有任何意见!

    关键问题:

    1. 我在查询中输入了一个简短的日期。如果这个短日期是UTC,那么查询中的日期可以被1取消。如果我将短日期作为东部传递,那么我将需要一个Linq-to-SQL语法,该语法可以转换为SQL,允许我比较不同时区的日期时间。

    再次感谢大家的帮助!

    4 回复  |  直到 15 年前
        1
  •  2
  •   Ed B    15 年前

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

    如果您曾经更改过时区,并且希望显示新的时区,那么一条SQL更新语句可以随时更新到新的时区。

        2
  •  5
  •   Jon Skeet    15 年前

    将时间从UTC转换为东部时间不应添加“大量代码”。它应该差不多是一条直线。

    我不知道你第二点的真正意思是什么——如果你详细阐述一下,这会有所帮助。如果你不知道所涉及的时区,你怎么能理解这个查询呢?如果你有效 假设 在东部时间,然后你可以做适当的转换到UTC。

    使用本地时间是 通常地 一个坏主意。如果你只有一个时区,那就没有了 不好,但如果你想用其他时区,那就太可怕了。(这不仅仅是批量更新数据库的问题——而是检查整个应用程序中每个日期的使用情况。)

    选择UTC选项,IMO。

        3
  •  0
  •   3Dave    15 年前

    以UTC格式存储时间,并将其转换为您的视图/页面/东部时间,或者更好地转换为客户的本地时间。

    另外,正如其他人所说,将UTC转换为东部时间不需要“大量的代码”,因为您基本上从时间中减去了一些小时,同时还稍微注意到日光节约。

    例如,考虑

    DateTime currentServerTime = DateTime.UtcNow.ToLocalTime(); 
    
        4
  •  0
  •   JSR    15 年前

    将值以UTC格式存储在数据库中,然后在客户端转换为本地时间。这样,每个客户都可以在其本地参考框架中看到时间,而您不必担心特定的时区。