2010-05-25 121 views
3

我在博客上工作,想在东部时区显示我的帖子。我认为存储一切UTC将是正确的方式。这虽然产生了一些挑战:将日期时间存储在数据库中?

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

  2. 与“大款”是我用一个短日期时间通过传递查询,ALA博客引用的帖子。问题是没有办法将短日期时间转换为正确的UTC日期,因为我缺少发布的时间信息。

嗯,任何问题只是存储在东部时间的所有日期?这肯定会使应用程序的其他部分更加容易,但如果我需要更改时区,则所有内容都将存储错误。

更新

@乔恩,非常看重自己的专业知识,但我已经决定存储UTC时间在数据库中是错误的。不过,你也许能够说服我!

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

什么我编码是一个博客,所以我有两条路线,一个列表路线和细节的路线。细节路线采用短日期,并且假定组合的帖子的名称是唯一的。这就是它崩溃的原因。我通过查询中的短路线。

根据一天中的时间,我们能够围住,使其为29或30这样的短日期必须是正确的,因为我没有在查询足够的信息来确定如何将东部时间转换回世界标准时间。

我被存储DatePosted“短日期”的所有时间@上午12点为SQL宗旨和FirstModified长日期的时间。所以,我说,好的没问题,我只会将短日期存储在东部,然后将长日期转换为东部。不行,因为我无法使这些查询工作。

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

也许,我在想这个毛病,但我的情况下,将永远只能是用于东部时区,所以这是浪费时间,无论哪种方式。

期待对此有任何意见!

的关键问题:

  1. 我传递在查询中的短日期。如果这个短日期是UTC,那么查询中的日期可能会被忽略1.如果我将短日期作为东部通过,那么我将需要一个linq-to-sql语法,它可以转换为SQL,以便我可以比较日期不同时区的时间。再次

感谢所有帮助!

回答

2

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

如果您曾更改过时区并希望显示新时区,则一条SQL更新语句可以将所有时间更新到新区域。

5

从UTC到东部时间的转换时间不应该添加“很多代码”。它应该几乎是一个班轮。

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

整个使用当地时间是一般一个坏主意。如果你只涉及一个时区,那么它不是不好,但如果你想要使用其他时区,它会变得很糟糕。 (这不仅仅是批量更新数据库的问题 - 它将是检查整个应用程序中日期的每一次使用的情况。)

转到UTC选项IMO。

+0

@Jon我在考虑使用短日期时间的情况。 5/23/2010。这可能是23或24,并且不能转换 - 取决于时间。即,日期可能是错误的。我可以在源头处理这个问题。 – 2010-05-25 18:23:38

+0

@Curtis White:要么有歧义 - 在这种情况下,您需要以任何方式处理它 - 或者没有,并且您可以补偿代码中的时区。 – 2010-05-25 18:35:00

+0

@Jon感谢您的帮助。我更详细地更新了这个问题,随处转换所有日期/时间的问题最终我最终需要SQL支持这些问题,这在SQL 2005中如何实现其中一些并不明显。所以它变得一团糟。我决定最好将它存储在元数据中,然后在需要切换时转换所有时间,这也可以避免大多数转换。 – 2010-06-01 00:52:05

0

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

另外,正如其他人所说,将UTC转换为东部时间不应该需要“大量代码”,因为您基本上从时间中减去了几个小时,同时仍然略知晓夏令时。

例如,考虑

DateTime currentServerTime = DateTime.UtcNow.ToLocalTime(); 
+0

这将无法正常工作。我不想在服务器上的本地时间,但东部时间。不过谢谢。 – 2010-05-25 18:21:11

0

将数据以UTC格式存储在数据库中,然后转换为客户端的本地时间。这样,每个客户都可以在他们当地的参考框架中看到时间,而且您不需要关注具体的时区。