タイムゾーン オフセット (分単位) があり、そのタイムゾーンを決定する必要があるシナリオがあります。すべてのデータが利用できないことはわかっていますが (たとえば、オフセットが -240 分のタイムゾーンがいくつかある可能性があります)、「最良の推測」は受け入れられます。
私の最初のパスは次のようになりました。
foreach (var info in TimeZoneInfo.GetSystemTimeZones())
{
if (info.BaseUtcOffset.TotalMinutes == timezoneOffset)
{
// do something here if this is a valid timezone
}
}
これはある程度機能しますが、夏時間を考慮に入れる必要があるため、多少気が遠くなります。この恐ろしいハックを追加しました:
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
}
}
これは、夏時間が有効でないときにユーザーに正確な時刻を表示できるという点で「十分に」機能し、DST 中は約 70% 正確です。それでも...これは私の目にはひどいコードです。
これを行うより良い方法はありますか?優雅さが増せば良く、精度が高ければさらに良いでしょう。
アップデート
技術的には、Javascript が日付に関して取得できるあらゆる情報にアクセスできます。「オフセット」と呼ばれる隠しフィールドを配置したページがあります。オフセット フィールドに DateTime().getTimezoneOffset() を入力する JQuery 関数があります。DateTime オブジェクトに役立つものは何も見当たりませんが、おそらくこれにより、他のアイデアへの道が開かれるでしょう。