2012-02-14 168 views
0

對於我正在處理的iPhone聊天應用程序,我想知道如何處理所有時區問題。 我的意思是當client1向client2發送消息時,他們都會在消息旁看到正確的時間(日期)。在客戶端 - 服務器應用程序中處理時間

到目前爲止,這是我認爲我需要做的:

  1. 客戶端1將消息發送到服務器,客戶端1使用它的呈現旁消息的日期本地時間。
  2. 服務器(c#)獲取消息並將其保存到數據庫中,同時他將消息旁邊的當前時間保存爲DateTime.UtcNow
  3. 當client2登錄時,他從服務器收到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 2012-02-14 14:07:43

+0

我不知道C#,但這看起來很有前途:http://msdn.microsoft.com/en-us/library/zdtaw1bw.aspx。選擇你理解的格式。如果你能找到一種方法將其轉換爲紀元時間(1970年以來的時間間隔),那麼你也可以使用它。 – kevboh 2012-02-14 17:13:13

相關問題