1

文字列処理に関連する国際化の問題は、次のアドバイスに従うことでほとんど解決できます。Unicode を使用し、すべてを UTF-8 としてデータベースに格納すると、世界中のすべての言語を使用してクライアントにサービスを提供できます。

しかし、日付/時刻の処理に関連する国際化の問題についてはどうでしょうか?

質問:

  • 時間処理を取り巻く国際化の問題を解決するための、同様のわかりやすいベスト プラクティスはありますか?
  • アプリケーションが異なるタイム ゾーンで動作するクライアントにサービスを提供できるようにするにはどうすればよいでしょうか? どのような問題に遭遇し、どのように解決しましたか?
4

3 に答える 3

8

私は次のアドバイスがあります、

  1. すべての時間を1つのタイムゾーン、できればズールー(GMT)でデータベースに保存します。
  2. 登録時に各ユーザーにタイムゾーンを割り当てます。通常、これは登録ページの言語またはプロモーションリンクに埋め込まれているコードからわかります。時々、私たちはユーザーに尋ねなければなりません。
  3. クライアントをタイムゾーン対応にします。これは、クライアントがサーバーからの時間をそのまま表示できないことを意味します。ローカルタイムゾーンおよびローカル形式で表示する必要があります。
  4. クライアントは、システムのタイムゾーン情報を取得するためにいくつかの努力をする必要があります。そうでない場合、サーバーはさまざまなデータから推測できます。最初に言語を使用し、次にIPアドレスを使用して良い結果が得られました。いずれにせよ、クライアントはゾーン情報とともに時間を表示する必要があるため、ユーザーは時間が間違っているときに何が起こっているのかを知ることができます。
  5. タイムゾーンの影響を受けない特定の時間値には、特別なフラグが必要です。ユーザーがロケールを変更すると、ユーザーの誕生日が変わるという間違いがありました。休日、営業時間など、このカテゴリに属する​​その他のもの。
  6. クロックをサーバーと同期する必要がある場合は、システム時間を変更せずに、デルタをクライアントに保存するだけにしてください。クロックがホストと同期している必要があるというセキュリティ要件がありました。そのため、クライアントは起動時にシステムクロックをサーバーと同期します。それは間違ったことです。タイムゾーンのないWindows95のような古いシステムでは、時刻をGMTに変更しました。最後に、古いクライアントはなくなりましたが、新しい問題に直面しているのは、NTPからの正確な時刻を台無しにしたことです。

私たちの間違いのいくつかがあなたがそれらを避けるのを助けることを願っています。

于 2009-08-16T23:16:54.080 に答える
1

ZZCoderにはいくつかの良い点があります。さらにいくつかの例を次に示します。

  • すべての日時値には、タイムゾーンが関連付けられている必要があります。datetime に含まれていない場合の意味を定義する必要があります (たとえば、GMT+0 を意味する場合もあれば、コードがそれを把握して割り当てている最中である場合もあります)。
  • おそらく、日時のあるイベントを場所に添付する必要があります。これは、日時のタイムゾーンの変更がいつ許可されるかを把握する方法があることを意味します。これにより、誕生日の移動の問題が解決されますが、夏時間の開始または終了時にインテリジェントな動作が可能になります。ただし、意図しない関係に注意してください。異なるタイムゾーンにいる複数の人々のために会議を設定する場合は、日時をコピーしてローカライズするのではなく、1 つの正規エントリを参照する必要があります。
  • 自分で計算を行わないでください。常に ライブラリ関数に日時の計算を依頼してください
于 2009-08-16T23:48:25.037 に答える
0

JavaScriptを使用してクライアントにタイムゾーンを通知してもらうことで、これにある程度の幸運がありました。私が覚えているなら、それは現地時間でユーザーのマシンの現在の時刻を計算し、それをズールーと比較することを含んでいました。

于 2009-08-16T23:25:40.643 に答える