2013-02-14 13 views
1

我讀了所有關於NSDateNSDateFormatter但沒有任何解決我的問題。我需要獲取當前日期,並在NSDate對象中使用此日期,但是當我這樣做時,我的小時總是帶有+2小時。即時通訊做這樣的事情:NSDate和NSDateFormatter不是我當前的本地或字符串日期

NSDateFormatter * dateformatter = [[NSDateFormatter alloc]init]; 
[dateformatter setLocale:[NSLocale currentLocale]]; 
[dateformatter setDateFormat:@"yyyy-mm-dd HH:mm:ss"]; 
//NSTimeZone* localTimeZone = [NSTimeZone localTimeZone]; 
//NSLog(@"timezone local = %@",localTimeZone); 
//[NSTimeZone timeZoneWithAbbreviation:@"BRST"]; 
NSString * current = [dateformatter stringFromDate:[NSDate date]]; 
NSLog(@"current = %@",current); // Cool this is my current date! 

NSDate *thedate = [dateformatter dateFromString:current]; 
NSLog(@"date = %@",thedate);// NO! my hours is wrong 

我需要添加我的當前日期NSDate,並且還需要添加一個NSDate一個字符串(與方法stringFromDate)。字符串示例:2013-01-21 17:05:17。當通過返回NSDate的方法stringFromDate傳遞這個字符串時,我打印NSDate並給我這個錯誤的日期:2013-01-21 19:05:17 +0000。

只是簡歷:

需要添加到我的NSDate的當前日期,也需要用NSString加入到NSDate像2013年1月21日17時05分17秒。我目前的本地是Brasil /Sãopaulo,而NSTimerZone abreviation是BRST。

+1

當你實例化一個NSDate對象時,它默認設置爲當前日期。你的日期是正確的。問題是,當你通過它的描述方法顯示它的值(當你把它作爲@「%@」登錄時,這就是所謂的),你可能會用不同的語言環境來使用它,這就是爲什麼你認爲它不是正確。 但是你可以嘗試用格式化程序重新格式化,你會看到你得到了相同的字符串(這將是你的預期)。 所以一般的想法是顯示NSDate始終使用NSDateFormatter而不是它的描述消息,所以你不會感到困惑。 – 2013-02-14 17:51:28

回答

1

theDate是正確的,您只需在另一個時區(+0000)中顯示它。

NSDate對象不知道任何關於時區的信息。但NSDateFormatter對象知道。默認情況下,NSDateFormatter使用當前時區(用戶在OS首選項中設置)。

當您創建一個字符串並顯示它時,它會顯示在您的時區BRST(-0200):2013-01-21 17:05:17。然後,當您從此字符串中創建日期時,日期格式化程序再次將其視爲BRST時區中的日期。但是,當您顯示原始NSDate對象時,它會在+0000時區中顯示日期:2013-01-21 19:05:17 +0000,即BRST中的17:05:17。

+0

到底!這是問題,這是我對NSDate和NSDateFormatter的結論。謝謝你的回答 – 2013-02-15 00:19:36

1

這是因爲在你dateformatter您使用HH代替hh。改變它在你的代碼:

[dateformatter setDateFormat:@"yyyy-mm-dd hh:mm:ss"]; 

你可以找inmormation關於這一主題在這裏:link

它採用YYYY指定年份組成。常見的錯誤是使用 YYYY。 yyyy指定日曆年,而YYYY指定ISO年份周曆中使用的年度 (「年份周」)。在大多數 的情況下,yyyy和yyyy的產量相同,但它們可能與 不同。通常你應該使用日曆年。

+0

我與HH交換了......但是NSDate * date = [dateformatter dateFromString:@「2013-10-04 15:34:23」]; //返回null。 – 2013-02-14 17:36:23

+0

NSString * current = [dateformatter stringFromDate:[NSDate date]]; NSLog(@「current =%@」,current); //當前日期仍然加上我當前日期的2小時 – 2013-02-14 17:41:15

+0

NSString * current = [dateformatter stringFromDate:[NSDate date]]; //當前日期= 2013-49-14 03:49:36口49 – 2013-02-14 17:51:23

相關問題