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

cho*_*bo2 39 c# asp.net asp.net-mvc timezone

在我的网站上,我需要知道人们所在的时区,以便在适当的时间向他们显示消息.我不太确定在如何执行此操作的教程方面要搜索什么.

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

我不确定我需要什么.我的数据库时间应该存储什么?我在某处读到它应该存储为UTC.如何设置我的数据库来执行此操作?此外,我将在一个共享主机站点,所以它必须以我能做到的方式设置(可能通过webconfig?).

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

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

wom*_*omp 36

为此,您绝对应该将您的时间戳以UTC格式存储在数据库中.

当您需要在站点上显示数据库中的日期时,您可以执行以下操作:

DateTime stamp = /* get datetime from the database here, make sure you
                    use the constructor that allows you to specify the 
                    DateTimeKind as UTC. */

//E.g.
//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")); 
Run Code Online (Sandbox Code Playgroud)

时区列表已在.Net中提供,因此您可以看到有关如何枚举它们的帖子.对于ASP.Net MVC,您不希望打印超时,而是希望将转换后的日期时间分配给模型类的属性,以便View可以将其用于显示.


Bri*_*eon 9

我不能强调使用UTC存储和处理您编写的任何应用程序的重要性.即使您知道应用程序将仅在单个时区中使用,因此夏令时问题仍然比使用本地时区更容易使用UTC.

在数据库级别,您真的没什么需要做的.只需创建一个普通的日期时间列,但要确保明确记录该列是否为UTC.

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