2011-08-26 57 views
1

這段代碼爲什麼會給我GMT? (我在美國山地時間)NSDate/NSDateFormatter在iPhone iOS 4.3上返回GMT

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateStyle:NSDateFormatterLongStyle]; 
[dateFormatter setTimeStyle:NSDateFormatterLongStyle]; 
[dateFormatter setLocale:[NSLocale currentLocale]];  

NSDate *now = [NSDate date]; 
NSString *storeTime = [dateFormatter stringFromDate:now]; 
+0

你能寫出你得到的完整日期嗎? – Nitish

+2

嘗試'[dateFormatter setTimeZone:[NSTimeZone localTimeZone]]' – EmptyStack

+0

嗯,它將來正好是6個小時,所以GMT而不是我當地的山區時間。例如,昨晚晚上9點30分我得到了 –

回答

3

一個NSDate代表時的具體點,不管時區的。換句話說,NSDate沒有時區。時區僅在您要向用戶顯示日期時纔有用。因此,在山區時間晚上9點30分格林威治標準時間3:30(+1天)(假設時差爲6小時)。

NSDate,因爲它沒有一個時區,必須產生人類可讀的版本時,返回其-description挑一個。爲了簡單起見,它總是返回格林尼治標準時間格式的日期。如果您希望格式化日期處於不同的時區,可以設置NSDateFormatter-timezone屬性,然後使用-stringFromDate:方法將日期轉換爲字符串。

0

是的,事實證明這是蘋果公司在Mac上的數字中的一個錯誤。 Numbers沒有解釋日期字符串,或者說它正在添加時間偏移量。格式化後的NSDate字符串始終是正確的。