タイムゾーンオフセット(分)があり、タイムゾーンを決定する必要があるシナリオがあります。私はすべてのデータが利用できないことを知っています(たとえば、オフセットが-240分のタイムゾーンがいくつかあるかもしれません)が、 "最高の推測"は受け入れられます。UTCオフセットでタイムゾーンを決定するにはどうすればよいですか?
foreach (var info in TimeZoneInfo.GetSystemTimeZones())
{
if (info.BaseUtcOffset.TotalMinutes == timezoneOffset)
{
// do something here if this is a valid timezone
}
}
このみかんは動作しますが、私は多少私を投げている夏時間を考慮して必要があります。
私の最初のパスはこのように見えました。夏時間が有効ではなく、DSTの間に約70%正解だとき、私はユーザーが彼らのために正しい時刻を表示することができます。これは、その中で「十分に」働く
foreach (var info in TimeZoneInfo.GetSystemTimeZones())
{
var extra = info.IsDaylightSavingTime(DateTime.Now) ? 60 : 0;
if (info.BaseUtcOffset.TotalMinutes + extra == timezoneOffset)
{
// do something here if this is a valid timezone
}
}
:私はこの恐ろしいハックを追加しました。それでも...これは私の眼球にひどいコードです。
これを行うより良い方法はありますか?より優雅さは良いでしょう、そして、より高い精度はまだまだ良いでしょう。
更新
技術的に私はJavascriptが日付に関して取得することができます任意の情報へのアクセスを持っています。私は "オフセット"と呼ばれる隠しフィールドを配置したページを持っています。私はDateTime()。getTimezoneOffset()でオフセットフィールドを設定するJQuery関数を持っています。私がDateTimeオブジェクトに何か役立つものは見えませんが、これはアイデアのための他の手段を開くでしょう。
@Sailing柔道:Javascriptでユニバーサルタイムスタンプをローカルのものに変換できるように、私の答えにいくつかのコードを追加しました。 – Kip