0

私は、.NET MVC 3 と SQL サーバー 2008 (r2) を使用して Web アプリに取り組んでいます。

とにかく、私は日時オブジェクトを持っており、それをユーザー時間に変換したいと考えています。今すぐユーザー時間に変換するのはかなり簡単です。ユーザーの UTC からのオフセットを取得する Java スクリプトがあります。そして、日時がUTCにオフセットされていることを知っています。

昨日気付いたのは、ユーザーが世界の厄介な地域に住んでいる場合、ユーザーのオフセットが変わるということです。そして、それは古い日付と時刻がある程度間違っている原因になります.

C# にはタイム ゾーンの時刻に変換するユーティリティがいくつかあることはわかっていますが、それらは本当に複雑な夏時間のすべてを処理するのでしょうか?

例えば。時間があれば、10-10-2001 8:00:00 どうすればそれを太平洋時間に変換できますか? または、2004 年 6 月 6 日を持っている場合、どうすればそれを太平洋時間に変換できますか?

ロール オーバーの日付が変更されるため、かなり複雑であり、タイム ゾーンの日付範囲を設定するためのメンテナンスを必要としない一般的なソリューションが必要です。

これが CS の古典的な問題であることは知っていますが、私の質問に 100% 答えてくれるものを見つけることができません。私が見たことから:C#は今年の夏時間の日付を使用して、毎年の日付時刻を変更します。これはいくつかの間違いを引き起こす可能性があります。

助けてくれてありがとう。

4

2 に答える 2

2

C# にはタイム ゾーンの時刻に変換するユーティリティがいくつかあることはわかっていますが、それらは本当に複雑な夏時間のすべてを処理するのでしょうか?

TimeZoneInfoはい、はい1。(これは .NET フレームワークの一部であり、C# の一部ではありません。C# はたまたま使用している言語です。) しかし、それはあなたが本当にやりたいことだとは思いません。

とにかくサーバーのDateTimeタイムゾーンに保存するのはなぜですか? ほとんどの場合、UTC で保存する方が賢明です。他のことは別として、サーバーが夏時間を観察するタイムゾーンにある場合、時計が戻ると、年に1時間あいまいになります。(同じ現地時間が 2 回発生します。)

UTC として保存したら、Javascript クライアントにも UTC として渡す必要があります。あなたは「UTCからのユーザーオフセットを取得するJavaスクリプト」を持っていると言いますが、それは正確な瞬間に依存します。たとえば、私は英国にいるので、オフセットが 0 時間になることもあれば、+1 時間になることもあります。UTC をクライアントに返すと、その UTC 時間からローカル時間を計算できます。クライアントからサーバーへのタイムゾーンの正確な表現を取得できない限り、サーバーはそれを行うことができません。これは一般的に難しいことです。

私が見たことから:C#は今年の夏時間の日付を使用して、毎年の日付時刻を変更します。

ここでも、C# 自体は関係ありません。.NET フレームワークのどの部分を意味するのか明確ではありません - TimeZone? TimeZoneInfo? DateTime? TimeZoneInfoには履歴データがありますが、それをサポートするオペレーティング システムのバージョンを使用している場合に限ります。


1まあ、あなたが気にする可能性が高い限り. TZDB ほど多くの履歴データはなく、ロシアとナミビアについては非常に奇妙な表現がいくつかありますが、一般的にルール変更のアイデアがあります。

于 2012-11-29T16:44:29.000 に答える