2013-04-10 59 views
2

我很難讓NSDateFormatter識別我傳入的日期。我很確定它與週日有關,但我無法弄清楚。爲什麼NSDateFormatter不能解析這個日期?

NSString *testDate = @"20130412 Friday"; 
NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
df.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
df.dateFormat = @"yyyyMMdd cccc"; 
NSDate *result = [df dateFromString:testDate]; 
NSLog(@"test: %@, result: %@", testDate, result); 

這會給我一個結果日期1999-12-30。我在工作日試過eeee和EEEE,但它沒有幫助。刪除星期幾似乎工作,但不能解釋我的日期格式有什麼問題。

+0

它給我2013-04-10 17:07:27.163內存[1409:f803]測試:20130412星期五,結果:2013-04-12 06:00:00 +0000 – HalR 2013-04-10 23:09:04

+0

只是猜測:你是否試過把* 6 * c在那裏而不是四個? – Undo 2013-04-10 23:09:22

+0

6 cs沒有區別。奇怪的是,HalR獲得了不同的結果 - 我使用XCode 4.6並使用最新的ios sdk構建。你也是嗎? – Dan 2013-04-10 23:16:44

回答

0

我不明白爲什麼工作日在那裏。它造成了日期不一致的可能性。你會期待什麼「20130412星期二」? (請注意,未來的讀者:20130412實際上是一個星期五)我檢查了http://userguide.icu-project.org/formatparse/datetime,並且可以找到禁止添加星期幾,但對我來說這似乎是一個壞主意。

但是,NSDateFormatter似乎表現不正確。我在iOS 6.1模擬器和OS X 10.8.3上進行了測試,並在兩個平臺上獲得了相同的結果。我甚至擴大一點,下面的代碼添加

id longResult; 
NSError *error; 
NSRange range = NSMakeRange(0, testDate.length); 
if (![df getObjectValue:&longResult forString:testDate range:&range error:&error]) { 
    NSLog(@"error: %@ reason:%@", error.localizedDescription, error.localizedFailureReason); 
} 

NSLog(@"result: %@", longResult); 
NSLog(@"%@", NSStringFromRange(range)); 

和生產

2013-04-10 16:45:27.921 date formatter fun ios[47350:c07] test: 20130412 Friday, result: 1999-12-31 07:00:00 +0000 
2013-04-10 16:45:27.922 date formatter fun ios[47350:c07] result: 1999-12-31 07:00:00 +0000 
2013-04-10 16:45:27.922 date formatter fun ios[47350:c07] {0, 15} 

它試圖解析,返回YES(成功的分析),但將錯誤的答案到結果。

相關問題