2014-01-17 37 views
2

我有以下代碼需要一個NSString並返回NSDate。我已經複製了它的運行完全正常的一個項目的代碼 - 但一些如何這給了我錯誤的輸出NsDate格式化程序給出錯誤的日期從字符串

- (NSDate *)dateFromString:(NSString *)date 
{ 
    static NSDateFormatter *dateFormatter; 
    if (!dateFormatter) 
    { 
     dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"dd-MM-yyyy"]; 
    } 

    NSLog(@"Date: %@ Formatted: %@",date,[dateFormatter dateFromString:date]); 

    return [dateFormatter dateFromString:date]; 
} 

和輸出作爲日誌:

Date: 07-01-2014 Formatted: 2014-01-06 18:30:00 +0000 
Date: 24-01-2014 Formatted: 2014-01-23 18:30:00 +0000 
Date: 06-01-2014 Formatted: 2014-01-05 18:30:00 +0000 
Date: 15-01-2014 Formatted: 2014-01-14 18:30:00 +0000 
Date: 22-01-2014 Formatted: 2014-01-21 18:30:00 +0000 
Date: 31-01-2014 Formatted: 2014-01-30 18:30:00 +0000 
Date: 14-01-2014 Formatted: 2014-01-13 18:30:00 +0000 
Date: 30-01-2014 Formatted: 2014-01-29 18:30:00 +0000 

在一個奇怪的意義上,它也正在改變日期..! 任何幫助...... !!!

+2

(只要搜索「NSDate的錯」 - 這已經問和答覆了很多次。) –

+0

在你的問題中,方法'dateFromString:'返回正確的'NSDate'。而日誌中的NSDate顯示錯誤的值。 – Akhilrajtr

回答

7

結果格式化爲GMT輸出 - 即,如果你是5:GMT3小時的路程。

你需要,如果你想格式化該時區要返回的日期指定一個時區:(這是什麼+0000手段)

- (NSDate *)dateFromString:(NSString *)date 
{ 
    static NSDateFormatter *dateFormatter; 
    if (!dateFormatter) 
    { 
     dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; 
     [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
     [dateFormatter setDateFormat:@"dd-MM-yyyy"]; 
    } 

    NSLog(@"Date: %@ Formatted: %@",date,[dateFormatter dateFromString:date]); 

    return [dateFormatter dateFromString:date]; 
} 
+0

日期:01-01-2014格式:2014-01-01 00:00:00 +0000 爲什麼我在輸出中得到這個... !!!不應該只是01-01-2014? –

+0

+0000?這是時區 – Magnus

+0

我只需要在01-01-2014的日期 - 月 - 年。我不需要小時和時區。我如何刪除該 –

-1

入住這

- (NSDate *)dateFromString:(NSString *)date 
{ 
    static NSDateFormatter *dateFormatter; 
    if (!dateFormatter) 
    { 
     dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"dd-MM-yyyy"]; 
    } 
    NSDate *dateValue= [dateFormatter dateFromString:date]; 
    NSLog(@"Date: %@ Formatted: %@",date,[dateFormatter stringFromDate:dateValue]); 

    return dateValue; 
}