2012-02-14 6 views
0

私が取り組んでいるiPhoneのチャットアプリケーションでは、すべてのタイムゾーンの問題をどのように処理するかを知りたいと思っています。 私は、client1がclient2にメッセージを送信するときに、メッセージの隣に正しい時刻(日付)が表示されるようにする方法を意味します。クライアント/サーバーアプリケーションで時間を扱う

  1. クライアント1は、サーバにメッセージを送ることがメッセージに次の日付を提示する現地時間です使用CLIENT1:

    は、これまでのところ、これは私が行うために必要だと思うものです。

  2. サーバ(c#)はメッセージを取得してデータベースに保存し、メッセージの横に現在時刻をDateTime.UtcNowで保存します。
  3. クライアント2のログイン時に、サーバーからUTC時刻を使用してメッセージを取得し、ローカル時刻に変換します。

これは方法ですか? サーバーからクライアントに日付を送信する最適な方法は何ですか?サーバーでは、日付はDateTimeオブジェクトとしてデータベースに保存されますが、どの形式に変換してクライアントに送信できますか?

答えて

2

あなたが報告された時間をする必要がありますどのように正確に応じて、ここではカップルのオプションがあります。それは本当に正確にする必要がある場合は

  1. は、私が唯一のサーバー時間に依存しています。 client1からサーバーにメッセージを送信したときに、サーバーがその応答にメッセージに関連付けられたUTC時間を返すようにします。だから私は "hello"というメッセージを送って、応答本体や拡張ヘッダーなどでUTC時間の200 OKを受け取った。次に、client1はこの時間(現地時間に換算)を表示し、client2は同じ時間(現地時間に換算)を表示します。
  2. 正確さがそれほど重要でない場合は、単にclient1からメッセージを送信し、現在のローカル時刻を使用する方が簡単です。サーバー上でUTCを実行しても、その時刻をclient1に使用させることはできますが、この方法では、client1のメッセージへの応答で何かを見る必要はありません。

日付の往復については、NSDateFormatterのドキュメントを参照してください。サーバーで簡単に使用できるフォーマットを使用するか、サーバー上で最も簡単なフォーマットを使用して、フォーマッターのカスタムdateFormatプロパティを使用して、必要に応じて解析します。

+0

ありがとう、私はまだC#で​​DateTimeオブジェクトから送信する必要があります理解していません。例えば、目的関数Cでは、DateオブジェクトをtimeIntervalSince1970に変換することができます。これは、この数値を文字列に解析して送信する理由です。しかし、C#では、DateTimeをtimeIntervalSince1970に変換するメソッドはないと思います。 – Eyal

+0

私はc#を知らないが、これは有望そうだ:http://msdn.microsoft.com/en-us/library/zdtaw1bw.aspx。あなたが理解できるフォーマットを選択してください。エポックタイム(1970年以降のインターバル)に変換する方法がある場合は、それも使用できます。 – kevboh

関連する問題