使用ASP.Net 3.5/SQL Server 2005在网站上使用TimeZones

Kje*_*sen 1 sql-server asp.net timezone utc .net-3.5

我试图确定,我应该如何在网络应用程序中实现本地时间.所有用户都已登录,没有匿名用户.他们需要在当地时间查看所有时间值.

这是怎么做的?

  1. 所有DateTime值都作为UTC时间保存在数据库中
  2. 每个用户都有一个UTC-Offset值存储在他的个人资料中
  3. 显示datetime-value时,我从数据库中获取值,并应用用户偏移量.

这是要走的路吗?或者我错过了什么?

Jon*_*eet 7

不要为用户存储UTC偏移量 - 这不足以了解全时区信息.您应该存储他们的Olson时区ID,例如"Europe/London".然后,您可以在当地时间显示任何UTC时间,同时考虑到历史变化,夏令时等.

编辑:看起来TimeZoneInfoID实际上并不是正常的Olson格式 - 但只要有一些合理的东西可以显示给用户(作为选择),并且你可以从以后检索区域的ID,这可能是好吧......如果您以后需要与其他系统进行互操作,可能会遇到困难.

您应该询问用户他们的时区(可能首先尝试通过JavaScript猜测) - 他们将获得比您更多的信息.

您应该调查TimeZoneInfo类以获取更多信息 - 我不能说我自己已经使用了很多,但它是从.NET 3.5开始的方式.特别是,FindSystemTimeZoneByIdGetSystemTimeZones将非常重要.

时区一般是痛苦的,但至少TimeZoneInfo比旧TimeZone类型提供更多的支持.