2012-08-11 118 views
2

我有一個應用程序,從時間戳爲UTC的服務器拉數據。我的應用必須根據當前的當地時間在屏幕上顯示內容。我遇到的問題是以下搜索核心數據的NSDate問題

如果我這樣做

// the Y M D is fine but time is -8 behind so showing 03:34 instead of 11:34. 
NSDate *today = [[NSDate alloc] init]; 

所以,當我做到這一點

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(start <= %@) AND (room == %@) AND (end >= %@)", today, room, today]; 

當插入NSPredicate我沒有得到正確的結果在今天是「2012-08-10 03:34:00」,但應該是「2012-08-10 11:34:00」

我不能只添加8小時的時間,因爲該應用程序可能用於不同的時區。唯一的想法是我得到的是設備時區計算它在UTC後面多少小時使用NSDateComponents加/減這些小時。有沒有更簡單的方法,只需在CoreData中設置NSPredicate提取的內容?

回答

1

[[NSDate alloc] init]返回當前的UTC日期和時間。

如果您要將日期存儲到數據庫或服務器,則作爲最佳做法,應存儲UTC時間,並且只有在用戶界面中顯示時才總是將其轉換爲「本地」格式。

如果你需要在你的UI中顯示它,你應該使用NSDateFormatter在本地時間正確顯示它。您可以使用NSTimeZone對象來確定本地時區,並將NSDateFormatter設置爲適當的時區。

即使當您創建由「本地配置的」NSDateFormatter格式化的NSDate時,基礎日期/時間仍然是UTC。

如果你遵循這些原則,你將不會有日期的任何問題,在您的謂語

我有一個時間存儲在UTC時間和轉換我的日期赫克
+1

..我想我有事情想通了,但在過去的三天裏,我的頭靠在牆上,因爲試圖與[NSDate date]一起爭吵已經產生了結果,這讓我覺得我正在對整個事情做錯了。你能否指點我一些以UTC存儲日期的方法(特別是[NSDate date]!),然後檢索並在當地時區顯示它們? – SAHM 2013-03-17 21:41:54