2013-08-16 79 views
1

我的目標:如果當前日期是「Today」或「Yesterday」,請使用「Today」和「Yesterday」兩個字。如果當前日期在今天或昨天之前,則使用以下格式(星期四,8月15日)。我能夠但是實現使用@"EEE, MMM d"當我設置setDoesRelativeDateFormatting爲NO這種格式,當我嘗試使用下面的代碼它分解並顯示月,12 2013年,這是不是我想要的......使用RelativeDateFormatting進行日期格式化

// Set up the date formatter 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
     [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 
     [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
     dateFormatter.dateFormat = @"EEE, MMM d"; 


     [dateFormatter setDoesRelativeDateFormatting:YES]; 
     [dateFormatter setLocale:[NSLocale currentLocale]]; 
+0

入住這裏:http://stackoverflow.com/questions/4937230/relative-string-from-nsdate –

回答

0

這是一個黑客,因爲我找不到一個內置的方法來執行此任務,但它幾乎完美地工作。唯一的問題是它輸出月份的全名而不是短的輸出。當然,如果需要的話,可以用類似於我在下面的代碼中所做的那樣修復。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
    [dateFormatter setDateStyle:NSDateFormatterFullStyle]; 

    NSDateComponents *comps = [[NSCalendar currentCalendar] components:NSYearCalendarUnit fromDate:[NSDate date]]; 

    NSString *theYear = [NSString stringWithFormat:@", %ld", comps.year]; 

    [dateFormatter setDoesRelativeDateFormatting:YES]; 

    [dateFormatter setLocale:[NSLocale currentLocale]]; 

    NSString *dateString = [dateFormatter stringFromDate:[NSDate date]]; 
    if ([dateString isEqualToString:@"Today"] || [dateString isEqualToString:@"Yesterday"]) { 
     NSLog(@"%@", dateString); 
    } else { 
     dateString = [dateString stringByReplacingOccurrencesOfString:theYear withString:@""]; 
     NSLog(@"%@", dateString); 
    } 

當相對格式化就可以了打印Today,當其從它打印Friday, August 16

+0

小警告:此解決方案不能很好地處理本地化設備。 –

+0

這是正確的,如果你改變它會破壞的語言環境。你可以改變'theYear'字符串而不用逗號,這將允許你刪除任何語言環境中的年份。不幸的是,16 de agosto de並不是用西班牙語輸出日期的正確方法。 –

+0

關於'relativeDateFormatting'的文檔對這個主題非常清楚:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/ occ/instm/NSDateFormatter/setDoesRelativeDateFormatting: –