web-dev-qa-db-ja.com

.NETタイムゾーン名によるタイムゾーンオフセットの取得

データベースには、すべての日付/時刻をUTCで保存します。

ユーザーのタイムゾーン名(たとえば、「米国東部標準時」)を知っています。

正しい時刻を表示するために、ユーザーのタイムゾーンオフセットをUTC日付/時刻に追加する必要があると考えていました。しかし、タイムゾーン名でタイムゾーンのオフセットを取得するにはどうすればよいですか?

ありがとうございました!

26
Daniil Harik

TimeZoneInfo.FindSystemTimeZoneById 提供されたIDを使用してTimeZoneInfoオブジェクトを取得し、次に TimeZoneInfo.GetUtcOffset から:

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time");
TimeSpan offset = tzi.GetUtcOffset( myDateTime);
42
Oded

TimeZoneInfo クラスの GetSystemTimeZones() メソッドを使用して、サーバーで構成されているすべてのタイムゾーンのリストをフェッチし、それをクライアントのタイムゾーンと一致させることができます。

なぜ「米国東部標準時」の形式のタイムゾーンがあるのですか?それはどこから来ましたか?

4
Dean Harding

手動で追加するのではなく、指定したTimeZoneに基づいて日付の変換を処理するConvertTimeTimeZoneInfoメソッドを利用する必要があります。

var localizedDateTime = TimeZoneInfo.ConvertTime(yourDateTime, localTimeZoneInfo);
2
kingdango