在ASP.NET MVC2中,转换时间用户的时区。如何获得时区信息?

时间:2013-09-14 06:12:51

标签: c# datetime asp.net-mvc-2 timezone

我将日期时间存储到数据库中然后我检索值..我的服务器数据库位于其他国家/地区。因此,当检索该值时,它将采用其他国家/地区的日期和时间..

我在控制器中尝试了如下,

 if (item.CreatedDate == null)
        {
            item.CreatedDate = DateTime.Now;
            var timeZone = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(item.CreatedDate, TimeZoneInfo.Local.Id, item.CreatedDate.Value).ToString();
        }

我在这里得到了行错误...如何纠正?

1 个答案:

答案 0 :(得分:2)

您传递的数据甚至不是正确的数据类型。阅读TimeZoneInfo,以便了解如何正确使用它。

同时阅读:

还要明白,在这里你实际上必须知道用户的时区。只是调用TimeZoneInfo.Local.Id不会起作用,因为那也是服务器的时区。 MVC没有魔术来了解用户的时区。你必须要求他们,或采用其他涉及JavaScript的策略。

根据您的评论,您似乎正在寻找类似的内容:

// These should be stored in UTC.  Do not store them in anyone's local time.
item.CreatedDate = DateTime.UtcNow;
item.UpdatedDate = DateTime.UtcNow;

// Then later when you want to convert to a specific time zone, do this
string timeZoneId = "India Standard Time"; // as an example
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
DateTime localCreated = TimeZoneInfo.ConvertTimeFromUtc(item.CreatedDate, timeZone);
DateTime localUpdated = TimeZoneInfo.ConvertTimeFromUtc(item.UpdatedDate, timeZone);

此外,您似乎可能正在为您的媒体资源使用DateTime?(可为空的日期时间)。对这些领域这样做是没有意义的。它们在数据库中应为非null,并且始终包含值。