2012-05-08 21 views
2

ASP.Net MVCアプリケーションでクライアントのタイムゾーン名(インド標準時など)が必要です。ASP.Net MVCアプリケーションでクライアントTimeZoneを取得する方法

ですので、TimeZoneInfo.FindSystemTimeZoneById(TimeZoneName)機能を使用できます。

私はこのコードでは夏時間に問題がある、new Date().getTimezoneOffset()reference

と試みたが、しています。 JavaScriptで

、私はまた、new Date().toString()

で試してみました。しかし、これは他のブラウザと異なる形式で結果を提供します。 Firefoxの、クロム& Safariで

は、 回答は "火2012年5月8日午前14時00分00秒GMT + 0530(インド標準時)" IE8では

あり、それは「火5月8日午後2時です。 00 UTC + 0530 2012 "

オペラにも同様の問題があります。

したがって、このメソッドはIE & Operaでは機能しません。

クライアントのタイムゾーンを特定する最も良い方法は何ですか?

答えて

3

最良かつ最も利用方法は

3

はあなたが必要ですタイムゾーンを決める。..クライアントのIPを利用するいくつかのサードパーティのライブラリやデータベーススルークライアントの場所を特定し、クライアントの位置に基づいてすることですタイムゾーンまたはUTCからのオフセットを知るには?タイムゾーンはISO標準ではなく、ほぼ自由に変更することができるため、クライアントのUTCからのオフセットを使用することをお勧めします。ログイン時にクライアントから取得するか、クライアントの時間が必要なフォームを送信するたびに取得します。時々私はクライアントのGTMオフセットを解決し、表示または使用する場所のどこでも使用するようにします。

だから私は普遍的な文字列として指定されたローカルの日付を返します。このようなグローバルJavaScript関数があります。私は現在のクライアントの日付を取得し、フォームに格納し、提出フォームで

function aspClientDateTime(dateObject) { 
    return dateObject.getFullYear() + '-' 
     + this.leadingZero((dateObject.getMonth() + 1), 2) + '-' 
     + this.leadingZero(dateObject.getDate(), 2) + ' ' 
     + this.leadingZero(dateObject.getHours(), 2) + ':' 
     + this.leadingZero(dateObject.getMinutes(), 2) + ':' 
     + this.leadingZero(dateObject.getSeconds(), 2); 
    } 

を:

myForm.clientTime.val(aspClientDateTime(new Date())); 

ブラウザで何時になったのかわかり、サーバー上でUTCオフセットなどを調整できます。

タイムゾーンの問題は、サモアが最近したように、すべての政府が明日新しい政府を導入できるということです。通常、私は、ユーザーの現在のオフセットが何であるかを知りたいのですが、タイムゾーンが何であるかはわかりません。

後者が本当に必要な場合は、Skypeと同様に。

+0

私はクライアントの時間が欲しくない、私はクライアントのタイムゾーンが欲しい。 夏時間のため、前述のようにTimeOffsetが適切ではありません。 – Harsh

+0

私が言っていることは、タイムゾーンは信頼できないということです。 "歴史的に関連性が高い、または地理的に正確な時間帯を探している場合は、jsTimezoneDetectはあなたのためではありません。 このスクリプトはジオロケーションを実行しません。 たとえば、中部ヨーロッパの異なるタイムゾーンを区別することは不可能です。このスクリプトは、中欧のタイムゾーンにどこに住んでいるかに関係なく、ヨーロッパ/ベルリンを返します。 " –

+0

これで、クライアントの時刻をキャプチャし、C#TimeZoneInfoクラスを使用してクライアントのタイムオフセットに一致するタイムゾーンを選択することで、そのスクリプトの動作を正確に行うことができますが、引き続き推測しています。これが明示的に自分のタイムゾーンを知る必要があれば、私は言ったのです。誰かがより良い解決策を思いついたら、私は興味を持っていきます。 –

0

JavaScriptでタイムゾーンを検出するためのライブラリがあります。それはあなたに十分なタイムゾーンの名前を与えるでしょう。ジオロケーションまたはIPルックアップを行わないため、非常に高速ですが、それほど正確ではありません。たとえば、中央ヨーロッパのタイムゾーンにいる人は「ヨーロッパ/ベルリン」を返します。ただし、サーバー側の日時の正規化には十分なはずです。

https://bitbucket.org/pellepim/jstimezonedetect

+0

これは完全に役立つわけではありません。インドとスリランカの場合は「アジア/カルカッタ」と表示されますが、2つの異なる結果が必要です。 – Harsh

+0

解決したい問題によって異なります。タイムゾーン全体で日時計算を行う場合は、非常に便利です。スリランカとインドは同じタイムゾーンを持つため。地理的に正確なタイムゾーン識別子を探している場合は、ジオロケーションやIPルックアップを使用する必要がありますが、どちらも完全に信頼できません。 –

関連する問題