2014-06-23 43 views
-2

我有一個問題,因爲轉換不正確,將字符串日期轉換爲NSDate。這是我的代碼:NSDateFormatter沒有轉換爲正確的日期

NSString *stringDate = @"6/20/2014 8:38:52 PM"; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"MM/dd/yyyy hh:mm:ss a"]; 

NSDate *timeStamp = [dateFormatter dateFromString:stringDate]; 

日誌總是說TIMESTAMP: 2014-06-20 12:38:37 +0000

如何將它轉換爲正確的日期?提前致謝。

+0

和時區設置(小時更改)? – Larme

+0

你使用'NSLog()'(因此'[NSDate description]')來顯示這個日期嗎?因此,您應該知道該日期將顯示爲GMT,而不是語言環境的時區。 – trojanfoe

+0

timezone是systemTimezone這是GMT + 8. –

回答

0

添加

[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]; 

而且你在UTC時區的日期。

+0

不,這沒有得到正確的時間。它產生一個NSDate,顯示OP的期望 - 但他的期望是錯誤的,那個日期是錯誤的。 – gnasher729

+0

+0000 - 這是UTC時區,如果您想獲得其他時區的結果日期,請使用[NSTimeZone timeZoneForSecondsFromGMT:3600] - +0100 – LLIAJLbHOu

1

我相信你這樣做是爲了在記錄中顯示的日期:

NSLog(@"timeStamp = %@", timeStamp); 

而是維持日期格式各地(存儲它在全球或某事),做:

NSLog(@"timeStamp = %@", [dateFormatter stringFromDate:timeStamp]); 

的區別是第一行代碼調用[NSDate description]來格式化使用UTC/GMT時區的日期,其中第二行代碼使用日期格式化程序中配置的時區(默認情況下它與區域設置的時區相同),並且與你曾經使用過的p區同樣重要首先扼殺字符串。

0
You can use this. It will give you proper output 
NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; 
    [dateComponents setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
    [dateComponents setYear:2014]; 
    [dateComponents setMonth:6]; 
    [dateComponents setDay:20]; 
    [dateComponents setHour:8]; 
    [dateComponents setMinute:38]; 
    [dateComponents setSecond:52]; 
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDate *date = [calendar dateFromComponents:dateComponents]; 

    //NSDate *timeStamp = [dateFormatter dateFromString:stringDate]; 
    NSLog(@"date = %@",date); 
//solutions[2247:70b] date = 2014-06-20 08:38:52 +0000 printing date 
相關問題