2011-07-14 7 views
0

すべてのDateTimeが常にサーバーの時刻であるアプリケーションがあります。それは1つのタイムゾーンを意味します。アイデアは、世界中のアプリケーションを互換性のあるものにすることです。最初のステップは、データベースに格納されているすべてのDateTimeをUTCに変換することです。これは問題ありません。第2のステップは、ユーザのためのタイムゾーン(ビジネスロジックに基づく)を想定し、ユーザ入力の表示と解析にデフォルトとして使用することです。さらに、DateTime.Nowや明示的なタイムゾーン/地域情報を持たないdatetimesを構築する他のメソッド呼び出しのようなメソッドでも、このタイムゾーン/地域が仮定されるといいでしょう。ビジネスロジックに設定されたユーザーあたりのデフォルトタイムゾーン

アイデアは、データベースのユーザーのタイムゾーンを想定することです。私はユーザーと彼のタイムゾーンを持っています、それは問題ありません。
問題はプレゼンテーションロジックです。これらのすべてのメソッドを変換するために、コードの上にDateTime.nowメソッドがあります。多くの作業です。
グローバルタイムゾーン設定が必要であることを避けるため、タイムゾーンはタイムゾーンを知っています。好ましくは一般的な場所にある。

class business logic 

InitializeCulture() 
set time zone for user 
end function 

end class 

class presentation logic 

sample() 
TimeOfTheCurrentUser = DateTime.now 
end function 

end class 
+0

、そして、あなたはどのような言語/フレームワークを使用していますか? – Mat

+0

質問:2番目のステップを達成する方法はあります "2番目のステップは、(ビジネスロジックに基づいて)ユーザーのタイムゾーンを想定し、ユーザー入力の表示と解析にデフォルトとして使用することです。タイムゾーン/地域情報が明示的に指定されていないdatetimesを構築するDateTime.Nowやその他のメソッド呼び出しのようなメソッドでも、このタイムゾーン/地域が想定されている場合に便利です。 言語/フレームワーク: VB .NET 3.5 – chrisdenarend

+0

関連する質問:http://stackoverflow.com/questions/2532729/daylight-saving-time-and-timezone-best-practices – Oded

答えて

1

あなたが(多かれ少なかれ)エンタープライズアプリケーションで処理する時間帯のためのベストプラクティスを探しているなら、私は実績のあるものを共有することができます。

  1. ストアUTCのすべての日付と時刻の関連情報。地元の時間(サーバーや他の場所に)として保存すると、いつか誰かがいつかそれらを変換することを忘れてしまい、その結果が理想的ではないというリスクがもたらされます。もちろん、DateTime.UtcNowまたは適切なDateTimeKindを選択して日付と時刻をインスタンス化する必要があります(これも構文解析を参照しています)。

  2. 明らかに、DateTimeをエンドユーザーに表示する前に、タイムゾーンを変換する必要があります。そして、あなたは、ある情報源からこの情報を得る必要があることを確かめています(したがって質問です)。これは、クライアント側(これは、シッククライアントではうまく動作し、シンクライアントではJavaScriptではうまく動作しません)でも可能ですが、ユーザープロファイルでも同じです。アプリケーションにユーザープロファイルがある場合は、ユーザーが優先するタイムゾーンを選択できるようにすることをお勧めします。他のg11n関連の設定は、電子メールや優先言語の優先文化となります。これらの設定はすべて検出して事前選択しておく必要があります(ユーザはあまりにも重大なクリックを心配する必要はありません)。

  3. DateTimeクラスを別のタイムゾーンで現地時間に変換するには、TimeZoneInfoクラスを使用します。あなたは、このメソッドを実装した場合は、タイムゾーン名での問題を打つこと

...それを行うには、いくつかの方法があります - 彼らは、サーバーの文化であるので、あなたは、外部化する必要があります(リソースへ移動ファイル)に、TimeZoneInfoのDisplayNameがあなたを示し、翻訳者に自分の仕事をさせます。

また、私が時間帯を検出することによって意味したちょっとした単語です。シッククライアント上で
あなたがするだけでローカルタイムゾーンを読んでいることだろう。

のJavaScript(シンクライアント)で
TimeZoneInfo currentTimeZone = TimeZoneInfo.Local; 

それは容易ではありません。あなたが得ることができる唯一のことは、与えられた日に(日付&時間に応じて変化させることができる)タイムゾーンオフセットされています。あなたの質問は何である

var date = new Date(); 
var offset = date.getTimezoneOffset(); // GMT offset in minutes 
関連する問題