2013-12-10 45 views
3

我工作中的iOS應用的時候,有一個NSDateFormatter對象如下:試圖利用在NSDateFormatter對象一週的縮寫一天的iOS

NSDate *today = [NSDate date]; 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"EEE, MMM. dd"]; 
NSString *dateString = [dateFormat stringFromDate:today]; 
NSLog(@"%@", dateString); 

我的輸出是:星期二,12月10日和我想顯示:TUE,12月10日。

雖然我的問題是,星期幾只有第一個字母大寫,而不是整個一天(即我得到「星期二」,我想顯示「TUE」)。這個月的格式很好(即我很滿意的「Dec」)。我已經檢查過日期格式的規格,不幸的是,沒有使用NSDateFormatter類來完成此操作的傳統方法。有沒有辦法解決這個問題,以便只在一週中的所有縮寫字母都沒有觸及月份的情況下將其大寫?

在此先感謝所有回覆的人。

+1

也許你應該只對你的NSDateFormatter做setShortWeekdaySymbols? '[dateFormat setShortWeekdaySymbols:@ [@「SUN」,@「MON」,...]];' –

回答

9

有沒有辦法直接與日期格式化程序。最簡單的方法是在格式化日期後處理字符串。

NSString *dateString = [dateFormat stringFromDate:today]; 
dateString = [NSString stringWithFormat:@"%@%@", [[dateString substringToIndex:3] uppercaseString], [dateString substringFromIndex:3]]; 

更新:以上

假定EEE總是給人一個3個字母的縮寫工作日。可能有一些語言環境或語言在這種假設無效的情況下出現。一個更好的解決方案將是:

NSString *dateString = [dateFormat stringFromDate:today]; 
NSRange commaRange = [dateString rangeOfString:@","]; 
dateString = [NSString stringWithFormat:@"%@%@", [[dateString substringToIndex:commaRange.location] uppercaseString], [dateString substringFromIndex:commaRange.location]]; 
+0

如果它是一個Thur? –

+0

@SamBudda它不會。格式是「EEE」,它總是給出三個字母的工作日。所以'星期四'變成'星期四'。 – rmaddy

+0

@rmaddy這與蘋果日期格式化程序文檔鏈接的文檔相反:http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns - 它爲EEE提供4個字母示例,例如:星期幾:E - 1..3 - 週二 – Jasarien

1

只是得到一天自己,大寫它,然後得到日期的其餘部分,並追加它。像這樣:

[dateFormat setFormat:@"EEE"]; 
NSString *day = [dateFormat stringFromDate:today]; 
[dateFormat setFormat:@"MMM. dd"]; 
NSString *restOfDate = [dateFormat:stringFromDate:today]; 
NSString *fullDate = [[day uppercaseString] stringByAppendingFormat:@", %@", restOfDate]; 
0

接受的答案並沒有真正解決問題。就像Hot Licks評論說,這是可以設置(標準/短/長期的/ etc)平日/本月DateFormatter實例符號:

dateFormatter.shortWeekdaySymbols = dateFormatter.shortWeekdaySymbols.map { $0.localizedUppercase } 
dateFormatter.monthSymbols = dateFormatter.monthSymbols.map { $0.localizedCapitalized } 

如果您需要在格式化的語言環境設置爲非默認你應該這樣做後再打這些電話。