SQL表中的UTC时间

时间:2009-08-11 02:03:43

标签: sql-server sql-server-2008

诸如CreatedDate和ModifiedDate之类的列通常在SQL表中使用。我认为,存储时间的UTC值将有助于消除对托管应用程序的服务器位置的依赖性。随着云计算越来越熟悉(甚至排除它),应用程序可以在任何时区和世界任何地方托管。

通过对这些字段使用UTC值,业务逻辑可以始终假定字段为UTC并转换每个本地化要求的日期。

我的思维过程是否正确?这种方法有任何缺点吗?是否更容易存储特定于区域的时间?

欣赏你的想法!

2 个答案:

答案 0 :(得分:5)

恕我直言,即使是本地唯一的应用程序也应该存储UTC,如果不是出于其他原因,那么至少要正确处理夏令时时间调整。对于分发的任何内容,UTC是必须的。

然后,客户端可以显示本地化的时间,因为所有客户端平台都支持将UTC显示为本地时间。

答案 1 :(得分:3)

SQL 2008有一个名为datetimeoffset的数据类型,它也可以存储时区。这意味着你可以吃蛋糕并吃掉它!

你有点需要存储UTC版本,因为否则你有“那是凌晨2:30那个?”每当夏令时发生时。但是使用datetimeoffset你很好。

如果存储UTC版本,则需要考虑客户端所在的时区为其显示。但是当夏令时发生时,所有时间都会移动一个小时,所以你仍然没有运气。

有趣的是,Mitch Wheat(发表评论你的问题)住在珀斯,他最近才引入了夏令时。我写了一篇关于此的博客: http://msmvps.com/blogs/robfarley/archive/2006/10/25/The-horror-of-daylight-savings-_2800_sorry-Perth_2900_.aspx

那么,看看你怎么样。我肯定会推荐datetimeoffset,这样你就可以在夏天显示时间存储为下午5点。

罗布