我试图确定,我应该如何在网络应用程序中实现本地时间.所有用户都已登录,没有匿名用户.他们需要在当地时间查看所有时间值.
这是怎么做的?
所有DateTime值都作为UTC时间保存在数据库中
每个用户都有一个UTC-Offset值存储在他的个人资料中
显示datetime-value时,我从数据库中获取值,并应用用户偏移量.
这是要走的路吗?或者我错过了什么?
不要为用户存储UTC偏移量 - 这不足以了解全时区信息.您应该存储他们的Olson时区ID,例如"Europe/London".然后,您可以在当地时间显示任何UTC时间,同时考虑到历史变化,夏令时等.
编辑:看起来TimeZoneInfo
ID实际上并不是正常的Olson格式 - 但只要有一些合理的东西可以显示给用户(作为选择),并且你可以从以后检索区域的ID,这可能是好吧......如果您以后需要与其他系统进行互操作,可能会遇到困难.
您应该询问用户他们的时区(可能首先尝试通过JavaScript猜测) - 他们将获得比您更多的信息.
您应该调查TimeZoneInfo类以获取更多信息 - 我不能说我自己已经使用了很多,但它是从.NET 3.5开始的方式.特别是,FindSystemTimeZoneById和GetSystemTimeZones将非常重要.
时区一般是痛苦的,但至少TimeZoneInfo
比旧TimeZone
类型提供更多的支持.