如何在ASP.NET MVC中做时区?

在我的网站上,我需要知道人们在什么时区,以便在正确的时间向他们显示信息。 我不太清楚在教程中要怎么做才能search什么。

我打算做的是:当用户来到我的网站时,他们将通过从下拉列表中select它来设置他们的时区。 我将它们的设置存储在我的数据库中,并用它来计算时间。

我不知道我需要什么。 什么应该是我的数据库时间存储? 我读的地方,它应该被存储为UTC。 我如何设置我的数据库来做到这一点? 另外,我将在一个共享的托pipe网站,所以它必须以一种方式,我可以做到这一点(也许通过webconfig?)。

接下来,我需要将所有时区列表作为HTML帮助程序或常规HTML。 我真的不想做一个。

然后,就像我说的,我需要一个教程来告诉我该怎么做。 我认为这是从那时起加减东西,但我可能是错的。

为此,您一定要在数据库中以UTC存储时间戳。

当您需要在网站上显示数据库中的date时,可以这样做:

DateTime stamp = /* get datetime from the database here, make sure you use the constructor that allows you to specify the DateTimeKind as UTC. */ //Eg //DateTime stamp = new DateTime(2009, 12, 12, 12, 12, 12, DateTimeKind.Utc); timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(" /* users time zone here */"); var convertedTime = TimeZoneInfo.ConvertTime(stamp, timeZoneInfo); //Print out the date and time //Console.WriteLine(convertedTime.ToString("yyyy-MM-dd HH-mm-ss")); 

时区的列表已经在.Net中,所以你可以看到这个post如何枚举它们 。 对于ASP.Net MVC,不是打印超时,而是将转换后的date时间分配给模型类的属性,以便View可以使用它来显示。

我不能强调使用UTC存储和处理任何应用程序的重要性。 即使您知道该应用程序只能在单个时区使用,由于夏令时问题,使用UTC比本地时区更容易。

在数据库级别上你没有什么特别的需要去做。 只要创build一个正常的date时间列,但要确保清楚地logging该列被假定为UTC。

老实说,asp.net不是我的专长,但是我认为你可以以某种方式从客户请求中获得时区。 实际上,由于夏令时规则可能会非常模糊,具体取决于地区,因此最好使用计算UTC偏移量的Java脚本并使用它来进行转换。 即使在2005年能源政策法案”之后,DST规则仍然存在一些在服务器端很难处理的例外情况。 不过,我认为你在允许客户设置自己的时区的想法在大多数情况下都能正常工作。

首先,检查MSDN的DateTime文档,并阅读它。 这里是关于DateTime的最佳实践的文章 ,其中涵盖了时区和UTC。

是的,你应该在你的数据库中存储UTC。 将date时间存储为UTC将允许您根据所选时区将时间转换为(或来自)用户。 你在正确的轨道上!