在我的网站上,我需要知道人们所在的时区,以便在正确的时间向他们显示消息.我不太确定在一篇关于如何做到这一点的教程中要搜索什么.

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

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

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

然后,就像我说的,我需要一个教程来告诉我该怎么做.我认为这是在加减时间,但我可能错了.

推荐答案

为此,您一定要在数据库中以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")); 

时区列表已在中提供.净,所以你可以看到this post on how to enumerate them.对于ASP.Net MVC,而不是打印超时,您希望将转换后的日期时间分配给模型类的属性,以便视图可以使用它进行显示.

Asp.net相关问答推荐

如何向 Array.IndexOf 添加不区分大小写的选项

创建一个供 ASP.NET 应用程序中的所有线程使用的静态 Regex 对象是否有效?

将 ASP.NET 成员资格表添加到我自己的现有数据库中,还是应该配置一个单独的 ASP.NET 成员资格数据库?

使用 C# 和 ASP.NET 从 Gmail/Hotmail/Yahoo 导入通讯簿

在程序集中找不到上下文类型

System.Web.HttpContext 无法识别

在 Asp.net mvc5 中使用用户名而不是邮箱作为身份

如何设置默认页面 asp.net

oAuth ASP.NET 成员资格提供程序

发布网站项目时临时路径太长

这个rendersection的代码是什么意思?

您正在使用哪些身份验证和授权方案 - 为什么?

在 ASP.NET 中使用 MasterPages 时使用 JQuery 的正确方法?

如何遍历自定义 vb.net 对象的每个属性?

ASP.NET:在 Response.Redirect(...) 之后代码会发生什么?

盒式磁带包与 MVC4 包

ASP.NET - 从静态方法/静态类访问会话?

LinkBut​​ton 向 OnClick 后面的代码发送值

Windows 身份验证在本地 IIS 7.5 上不起作用.错误 401.1

在 ASP.NET 中使用 SecureString 有什么好处吗?