代碼之前經歷過
NSString *dateStr = @"2011-07-06";
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"yyyy-MM-dd"];
NSDate *tmp = [format dateFromString:dateStr]
將導致的NSDate對象,表示您的本地時間0:00 - 開始的一天。
但是,如果您打印一個普通的日期對象,它將產生一個表示格林尼治標準時間的時間的字符串,因爲內部所有日期都被歸一化爲該時區。
由於你的字符串是4小時前,我們可以告訴你,你最有可能在東歐,也許莫斯科。
所以,如果你想看到你的時區的字符串,你需要使用NSDateFormatter從日期對象創建它。
NSLog(@"tmp is %@",[formatter stringFromDate:tmp]);
檢查,如果是正確的,我說的是,改變格式來包含時間組件。
formatter.format = [@"yyyy-MM-dd HH:mm"];
NSLog(@"tmp is %@",[formatter stringFromDate:tmp]);
的格式也將採取「古怪」像閏日,Leap Month(是 - 那些退出),夏令時間,Leap Seconds ...帳戶 - accordantly當前的日曆。
一個偉大的WWDC 2011視頻:Performing Calendar Calculations - 一個必須看到每個可可開發商。
BTW:打印你不使用的NSLog一個對象需要調用-description
它在一個字符串傳遞。 NSLog將在內部執行此操作。
NSLog(@"tmp is %@", tmp);
就好了。