2009-08-24 18 views
39

私のサイトでは、適切な時にメッセージを表示するために、人々がどこにいるのかを知る必要があります。私はこれを行う方法に関するチュートリアルの面で何を探しているかについてはあまりよく分かりません。ASP.NET MVCでタイムゾーンを行う方法は?

私がやりたいことは、ユーザーが自分のサイトに来たときに、ドロップダウンリストからタイムゾーンを選択することです。私は自分の設定をデータベースに保存し、それを使って時間を計算します。

私は何が必要なのか分かりません。データベースの時間はどのように格納する必要がありますか?私はどこかに、UTCとして保存する必要があると読んでいます。これを行うためにデータベースを設定するにはどうすればよいですか?また、私は共有ホスティングサイトにいるので、私はそれをやり遂げることができるように設定しなければなりません(多分webconfigを通して)?

次に、すべてのタイムゾーンの一覧がHTMLヘルパーまたは通常のHTMLとして必要になります。私は本当に1つを作りたくありません。

次に、私が言ったように、私は何をすべきかを示すチュートリアルが必要です。私はそれがその時からのものを追加したり引いたりしていると思うが、間違っている可能性がある。

答えて

36

このためには、タイムスタンプをUTCにデータベースに格納する必要があります。

あなたのサイト上でのデータベースからの日付を表示する必要がある場合は、あなたがこれを行うことができます:

DateTime stamp = /* get datetime from the database here, make sure you 
        use the constructor that allows you to specify the 
        DateTimeKind as UTC. */ 

//E.g. 
//DateTime stamp = new DateTime(2009, 12, 12, 12, 12, 12, DateTimeKind.Utc); 

timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(" /* users time zone here */"); 
var convertedTime = TimeZoneInfo.ConvertTime(stamp, timeZoneInfo); 

//Print out the date and time 
//Console.WriteLine(convertedTime.ToString("yyyy-MM-dd HH-mm-ss")); 

タイムゾーンのリストは、.NETですでに提供されていますので、あなたはthis post on how to enumerate themを見ることができます。 ASP.Net MVCの場合、タイムアウトを出力する代わりに、変換したdatetimeをモデルクラスのプロパティに代入して、ビューで表示するために使用することができます。

+0

こんにちはおかげで、私はこれを実装しようとして開始します。私は別の未知のものがある。ユーザーは私のサイトに来ていますか?dbを通過し、タイムゾーンに基づいて表示するメッセージを確認します。だから私は最初に彼らの時が何かを把握し、それをUTCに変換するだろうか?そしてどこでそれをするのですか?あなたの例であなたのやっていることを逆にするのですか? – chobo2

+0

まずは、ユーザーが自分のタイムゾーンを設定できるようにすることについて言及しました。しかし、javascriptを使用してユーザーのタイムゾーンを検出する方法はいくつかあります。たとえば、この記事のように、stackoverflowを検索して詳細情報を得ることができます。http://stackoverflow.com/questions/1017053/finding-the-clients-timezone- and-culture-via-web-service – womp

+0

私は自分たちのタイムゾーンを選んでいて、現在はJavaScriptを調べたいとは思っていません。私はちょうど私が私のデータベースの特定の日付を探し始める方法であると言っていますか? UTFに変換しようとしていますか? – chobo2

2

まず、MSDNにDateTimeのドキュメントをチェックし、それを読んでください。 Here is an articleは、タイムゾーンとUTCをカバーするDateTimeのベストプラクティスです。

はい、データベースにUTCを格納する必要があります。 UTCとしてDateTimesを保存すると、選択したタイムゾーンに基づいてユーザーに時刻を変換することができます。あなたは正しい道を歩いている!

9

あなたが書いたアプリケーションの格納と処理にUTCを使用することの重要性を強調することはできません。アプリケーションが単一のタイムゾーンでのみ使用されることがわかっていても、夏時間の問題のためにUTCで作業するのはローカルタイムゾーンよりもずっと簡単です。

実際にデータベースレベルで行う必要はありません。通常の日時列を作成するだけですが、その列がUTCであると見なされることが明確に文書化されていることを確認してください。

私は正直なところだろう、asp.netは私の専門知識はありませんが、私は、あなたが何らかの形でクライアントの要求から、タイムゾーンを得ることができたと思ってい。実際には、地域によっては夏時間ルールがかなり不明瞭になる可能性があるため、UTCオフセットを計算して変換を行うために使用するJavaスクリプトを使用する方がよい場合があります。でも2005のエネルギー政策法の後に、サーバー側で対処するという難しいでしょうDST規則にはいくつかの例外が残っています。しかし、あなたは、クライアントが自分のタイムゾーンを設定できるようにする考えは、ほとんどの場合うまくいくと思います。

関連する問題