c# – 在数据库中存储时区信息的最佳方式是什么?

我有一个asp.net-mvc网站,我接管了,有一个页面页面,人们输入信息和时间(包括本地时区).数据库始终坚持开始时间,结束时间和时区,因为它对我来说有点薄弱.以下是获取列表以供选择的代码:

  static private IEnumerable<SelectListItem> GetTimeZones(string selected)
    {
        var timeZoneNames = TimeZoneInfo.GetSystemTimeZones()
            .Where(tz => tz.DisplayName.Contains("London")
                         || tz.DisplayName.Contains("Hong Kong")
                         || tz.DisplayName.Contains("Mumbai")
                         || tz.DisplayName.Contains("Eastern Time"))
            .ConvertAll(tz => tz.DisplayName).ToList();

        var items = new List<SelectListItem>();
        foreach (var item in timeZoneNames)
        {
            var slItem = new SelectListItem();
            slItem.Text = item;
            slItem.Value = item;
            slItem.Selected = item == selected;
            items.Add(slItem);
        }

        return items;
    }

所以它简单地存储从TimeZoneInfo.GetSystemTimeZones()返回的完整的字符串,

这种做法有什么缺陷吗?我有点担心reading here这个来自机器本地,如果不同的机器有不同的设置.另外,试图找出是否列出了UTC或GMT等. .有什么更好的建议吗例如,我应该在网站上进行UTC转换,并在数据库中规范化所有的时间吗?

最佳答案
您应该存储由TimeZoneInfo.Id返回的ID.这是标识符 – 用于标识时区的字符串.使用显示名称是一个非常糟糕的主意,因为文化可能会有所不同,而且不太稳定.

然后,您可以使用TimeZoneInfo.FindSystemTimeZoneById从ID中检索区域.

诚然,我更喜欢TZDB进行时区处理,但这是一个不同的事情:)

转载注明原文:c# – 在数据库中存储时区信息的最佳方式是什么? - 代码日志