2011-05-23 129 views
2
NSString *lower = [NSString stringWithFormat:@"%@",[newDates objectAtIndex:0]]; 
    NSString *higher = [NSString stringWithFormat:@"%@",[newDates objectAtIndex:[newDates count]-1]]; 
    NSLog(@"%@",lower); 
    NSLog(@"%@",higher); 

    NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    [df setDateFormat:@"yyyy-MM-dd"]; 
    NSDate *dtLower = [df dateFromString:lower]; 

    NSDate *dtHigher = [df dateFromString:higher]; 
    [df release]; 
    NSDateFormatter *df1 = [[NSDateFormatter alloc] init]; 
    [df1 setDateFormat:@"yyyy-MM-dd"]; 
    NSString * lowerDate = [df1 stringFromDate:dtLower]; 
    NSString * higherDate = [df1 stringFromDate:dtHigher]; 
    UILabel *dateLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 31, self.view.frame.size.width, 30)]; 
    [dateLabel setTextColor:[UIColor grayColor]]; 
    dateLabel.text = [NSString stringWithFormat:@"%@ - %@",lowerDate,higherDate]; 
    [self.view addSubview:dateLabel]; 

輸出的lowerhigher在控制檯:- [NSDateFormatter dateFromString:]返回nil

2011-05-23 14:55:52.767 Vocab[4225:207] 2011-05-23 03:58:22 
2011-05-23 14:55:53.781 Vocab[4225:207] 2011-05-23 07:14:56 

在這裏,上面的代碼並沒有爲我工作。爲higherlower值不爲空,但是當我嘗試使用NSDateFormatter轉換成NSDate的則返回零。

所以dtLowerdtHigher回零

出了什麼問題?

回答

8

嘗試設置[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

+0

@parth:歡迎你:) – KingofBliss 2011-05-23 10:36:35

3
[df setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; 

你的第一個日期格式是錯誤的。

3

如果您正在使用用戶可見日期,應避免設置日期格式字符串,因爲很難預測格式字符串在所有可能的用戶配置中的表現方式。相反,你應該嘗試限制自己通過-[NSDateFormatter setDateStyle:]-[NSDateFormatter setTimeStyle:])設定日期和時間樣式(。

如果你有固定格式的日期工作,你應該首先設置的日期格式的區域設置適當的東西爲您的固定格式。在大多數情況下,最好的區域選擇是en_US_POSIX,這是專門設計用於生產美國英語的結果,無論用戶和系統首選項的語言環境。en_US_POSIX也是不變的時間和機器之間(en_US_POSIX適用於iOS相同因爲它在OSX,並且因爲它確實在其他平臺上)。

一旦你設置en_US_POSIX的日期格式的區域設置,您可以設置日期格式字符串和日期格式將始終如一地爲所有用戶。

上述信息,更可以發現蘋果的Technical Q&A QA1480

下面是一個代碼片段,它實現從上面的技術說明推薦:

static NSDateFormatter* dateFormatter = nil; 
if (!dateFormatter) 
{ 
    dateFormatter = [NSDateFormatter new]; 

    NSLocale *enUSPOSIXLocale = [[NSLocale alloc] 
           initWithLocaleIdentifier:@"en_US_POSIX"]; 

    [dateFormatter setLocale:enUSPOSIXLocale]; 
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
    dateFormatter.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss +0000"; 
}