我接手了一个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()返回的完整字符串。
这种方法有什么缺陷吗?我有点担心在这里读到,因为它是从本机获取的,那如果不同的机器有不同的设置呢?而且,我想知道是否所有时间都以UTC或GMT等方式列出。是否有更好的建议?例如,我应该在网站上进行转换,规范化数据库中的所有时间吗?
DATETIMEOFFSET
。我还没有找到它的用途(我更愿意将用户的时区存储一次,将日期存储为UTC,并根据用户进行调整),但其他人声称它可以用于此目的。 - Aaron Bertrand