2011-08-05 58 views
2

結果仍然是前一天,我只是問自己爲什麼,因爲NSTimeZone設置正確,對我的國家來說是正確的(意大利,羅馬) 這裏是我的代碼存根,任何想法?即使NSTimezone正確設置,仍然有NSDateFormatter結果問題,爲什麼?

NSString *dateString = @"03/07/2008"; 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setFormatterBehavior:[NSDateFormatter defaultFormatterBehavior]]; 
    [formatter setDateFormat:@"dd/MM/yyyy"]; 
    [formatter setLocale:[NSLocale currentLocale]]; 
    [formatter setTimeZone:[NSTimeZone systemTimeZone]]; 
    NSDate *dateFromString = [formatter dateFromString:dateString]; 
    [formatter release]; 

結果在dateFromString是本2008-07-02二十二時00分00秒0000

我尋找其他解決方案,但常見的答案是正確設置時區,在我的情況下,它設置正確,但問題仍然存在。

+0

它的工作在我的機器上就好了。你在模擬器和手機上試過了嗎? –

回答

6

這是正確的,因爲默認情況下,NSDate將在其描述+0000中返回UTC日期。你比UTC早幾個小時,所以你可以在前一天的22:00:00。我是-5和我的結果UTC是2008-07-03 04:00:00 +0000(DST)。日期是正確的,它只是以UTC顯示,如果你想在某處正確顯示它,只需使用日期格式化程序再次獲取字符串即可。

... 
NSDate *dateFromString = [formatter dateFromString:dateString]; 
NSString *stringFromDate = [formatter stringFromDate:dateFromString]; 
[formatter release]; 

NSLog(@"%@ : %@", dateFromString, stringFromDate); 

2008-07-03 04:00:00 +0000:03/07/2008

+1

+ 1意識到' - [NSDate description]'總是以UTC打印日期非常重要 –

+0

哦,來吧 - .-什麼是小白,謝天謝地;)。 –

相關問題