2011-09-25 104 views
1

我有問題,NSDateFormetter 我將日期從選擇器在一個視圖中字符串錯誤日期從formater返回!爲什麼?

`NSDateFormatter *output = [[NSDateFormatter alloc] init]; 
[output setDateStyle:NSDateFormatterMediumStyle]; 
[output setDateStyle:NSDateFormatterShortStyle]; 
[output setDateFormat:@"yyyy-MM-dd hh:mm:ss"];  
NSString *StringToSend = [output stringFromDate:datePicker.date]; 

` 然後發送串到其他筆尖

,與該代碼轉換回

`NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init]; 
[inputFormatter setDateStyle:NSDateFormatterMediumStyle]; 
[inputFormatter setDateStyle:NSDateFormatterShortStyle]; 
[inputFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; 
NSDate *formatterDate = [inputFormatter dateFromString:StringFromOtherView]; 
NSLog(@"%@", formatterDate);` 

和這是回錯日期 發送2011-09-26 01:02:49 geting 2011-09-25 22:02:49 +0000

有什麼不對?

+2

你爲什麼要設置MediumStyle再短的風格?然後指定一個明確的日期格式。看起來像冗餘部門的輸出。 –

+0

「冗餘部門」。爆笑! – Hahnemann

回答

0

將時區包含在日期格式字符串中。

+0

但看[這裏](http://stackoverflow.com/questions/6613110/what-is-the-best-way-to-deal-with-the-nsdateformater-locale-feature)。除了設置時區之外,您還應該設置區域設置。 –

5

因爲:

  1. 當你NSLog()一個NSDate,它總是日誌它GMT
  2. 你住在一個時區這是提前GMT三個小時。因此,上午1:02是格林威治標準時間下午22:02(前一天)。
+0

+1爲好答案!我一天天成爲你的粉絲。我仰望你,如果我有一天能像你一樣有知識,那麼我想我會取得巨大的成功:] –

0
+ (NSDate*) dateFromString:(NSString*)aStr 
{ 

    if (aStr.length == 10) { 
    aStr = [aStr stringByAppendingFormat:@" 00:00:00"]; 
} 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"MM-dd-yyyy HH:mm:ss"]; 
    dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
    NSLog(@"strdate %@", aStr); 
    NSDate *aDate = [dateFormatter dateFromString:aStr]; 
    NSLog(@"date = %@",aDate); 
    [dateFormatter release]; 
    return aDate; 

}

相關問題