2013-12-11 75 views
1

我想從一個字符串創建一個NSDate變量,該日期來自第三方服務器,所以我無法更改它。日期是這種格式2013年12月8日和我使用下面給出日期formater樣式將其轉換爲日期,但是這是創建一個錯誤的和固定的日期爲所有項目是2012-12-22 19:00: 00 +0000從月,日,年創建NSDate

請你指導我如何解決這個問題。我不希望打破字符串,並使用NSDateComponents創建日期。

[dateFormaterForSermonTemp setDateFormat:@"MMMM dd, YYYY"]; 
+4

不要使用大寫YYYY。使用小寫字母yyyy。 – Anna

+1

請注意,生成的NSDate對象將*始終*以您在上面顯示的格式顯示,並以格林尼治標準時間 - 您無法更改該格式。如果你想以不同的格式顯示,通過NSDateFormatter運行日期以產生一個字符串。 (事實上​​,你絕對不應該使用NSDate上由'@「%@」'產生的格式,因爲這僅僅用於診斷,理論上可以隨時改變。) –

+0

@Anna YYYY和yyyy –

回答

5

您可以使用下面的代碼:

NSString *stringDate = @"December 08, 2013"; 

// Convert string to date object 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"MM dd, yyyy"]; 
NSDate *date = [dateFormat dateFromString:stringDate]; 

// Convert date object to desired output format 
[dateFormat setDateFormat:@"MMMM dd, yyyy"]; 
stringDate = [dateFormat stringFromDate:date]; 

NSLog(@"%@", stringDate); 

stringDate是從你的服務器的字符串,將其轉換爲NSDate,並添加了新的格式像@"MMMM dd, yyyy"日期。

(在這裏,你將得到相同的結果,但改變格式,如@"MMMM-dd-yyyy EEE"例如獲得另一個格式日期)。

編輯:

也許你需要設置timeZome您的日期

[dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT+0:00"]]; 
+0

是的它的工作,但它更改日期爲一天返回輸出是2013-12-07 19:00:00 +0000 –

+0

我認爲你有一個設備上的時鐘設置或timeZone的問題。看看我的編輯。 –

0
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"MM dd, yyyy"]; 
NSDate *date = [dateFormat dateFromString:@"December 08, 2013"]; 
+0

是的它的工作,但它改變日期爲一天返回輸出是2013-12-07 19:00:00 +0000 –

0

在這裏,你有documentation about date format string。 (棒不是魚)。

所以,你的格式字符串日期2013年12月8日應該是這樣的(魚):

@"MMMM dd, y" 

,不要忘記設置正確的語言環境的日期格式化器,也可以有意想不到的在具有不同區域設置的設備上出現問題。

+0

關鍵是小寫「y」。大寫字母「Y」具有奇怪的不同含義,可以將所有內容分開。 –

+0

看到我的鏈接,文檔很模糊,大寫'Y'如何在格式字符串中工作。它說它用於「年周曆」,因此可能需要一週信息來使資本「Y」正常工作。 –

0
NSString *[email protected]"December 08, 2013"; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 
[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 

NSDate *date=[dateFormatter dateFromString:strDate]; 

嘗試......

+0

是的它的工作,但它改變日期到一天回輸出2013-12-07 19:00:00 +0000 –