2011-11-09 46 views
0

在Xcode 4之前,我曾經使用NSDate initFromString,但現在不推薦使用它,並在Xcode 4.2中產生錯誤。所以我跳到使用NSDateFormatter dateFromString,但遇到了一個問題,我調用的方法從字符串獲取日出日期,從字符串獲取日落日期以確定它是白天還是晚上(如此相同的方法)。第一個調用工作正常,但第二個調用返回nil。我決定去看看它是否是重複的,所以我創建了以下簡單的方法,並傾倒到另一個項目,無害的地方:NSDateFormatter dateFromString在第一次調用後以同樣的方法產生nil

- (void)testDateFormatter 
    { 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 

    [formatter setDateFormat: @"yyyy-MM-dd hh:mm:ss Z"]; 
    NSString *srDateTimeString = @"2011-11-09 07:08:00 -0800"; 
    NSString *ssDateTimeString = @"2011-11-09 17:08:00 -0800"; 

    NSDate *sunriseDateTime = [formatter dateFromString: srDateTimeString]; 
    NSDate *sunsetDateTime = [formatter dateFromString: ssDateTimeString]; 

    return; 
    } 

第一次調用返回正確的日期。第二次調用返回nil。我嘗試了幾個變體(例如創建兩個單獨的NSDateFormatters,預初始化日期,將日期初始化爲當前時間,然後重新分配),但沒有做任何預期的事情。

有人知道這裏發生了什麼嗎?因爲我在任何地方都沒有發現任何有關此錯誤的參考信息(錯誤#10420498)。

傑克

+0

當我編輯我看到你沒有()testDateFormatter後,似乎是一個錯字,所以我糾正它。只是讓你知道。 –

+0

@Anders,這不是一個錯字,Objective-C不會將它的參數列表放在括號中。 – goldfire

+0

爲了澄清,你做了兩個單獨的NSDateFormatter對象,發送了兩個單獨的字符串dateFromString _separately_,這仍然發生? – goldfire

回答

3

在第二串,小時爲17(24小時制),但該格式字符串使用hh(小寫),這是12小時格式。

將格式字符串更改爲yyyy-MM-dd HH:mm:ss Z

在文檔中,請參閱Date Formatters,其中包含指向每個格式說明符的Unicode Date Format Patterns的鏈接。

+0

現在我感到很蠢,但我也很欣賞這種改正。當然,這很好。是否有可能,當initFromString仍然工作,那麼24小時的時鐘仍然工作?我只問,因爲我有我的代碼文檔中的Unicode日期格式模式文檔的鏈接(以便我不必繼續弄清楚它在哪裏)。無論如何,我現在要解決我的bug到蘋果。 – Jack

+0

您現在應該考慮接受答案。 – thesummersign

相關問題