私は引き継いだasp.net-mvcのWebサイトを持っています。人々が情報と時間を入力するページページがあります(ローカルタイムゾーンを含む)。データベースは開始時間、終了時間、タイムゾーンを維持しています。ここから選択するリストを取得するコードは次のとおりです。私のDBにタイムゾーン情報を保存する最良の方法は何ですか?
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への変換を行い、データベース内のすべての時間を正規化する必要がありますか?
SQL Serverののバージョンは? SQL Server 2008には、['DATETIMEOFFSET'](http://msdn.microsoft.com/en-us/library/bb630289(v= sql.100).aspx)が導入されました。私はまだそれのための使用を見つけるために(私はむしろユーザーのタイムゾーンを一度格納し、UTCとして日付を格納し、ユーザーごとに調整する)が、この目的のために使用することができると主張する。 –
DBに日付時刻をUTCとして格納することには1つの欠点があります。 DB側でDSTをどのように考慮しますか?タイムゾーンとDSTに関して、DateTimeまたはDateTime2をユーザーのローカル時刻に変換する方法はありません。オフセットを渡すと、ある日はDSTに、もう1つはDSTになっているため、まだオフになっている可能性があります。例3/10/2012 2:00:00 ESTは3/09/2012 20:00:00 UTCですが、2012/03/13 2:00:00 ESTは2012年3月12日19:00:00 UTCです。基本的に-4と-5のオフセット。 UTCをローカルに変換するには、オフセットをSP -4または-5に渡しますか?いずれにせよ、どちらかが間違っています。 – aBetterGamer