尝试在iOS中的NSDateFormatter对象中大写缩短的星期几

时间:2013-12-10 21:26:21

标签: ios nsdate nsdateformatter

我正在使用iOS中的应用程序,我有一个NSDateFormatter对象,如下所示:

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类没有传统方法。有没有办法解决这个问题,仍然可以在一周中将所有缩写字母大写,而不会触及月份?

3 个答案:

答案 0 :(得分: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]];

答案 1 :(得分:3)

接受的答案并没有真正解决问题。就像Hot Licks评论一样,可以在DateFormatter实例上设置(标准/短/长/等)工作日/月符号:

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

如果您需要将格式化程序的区域设置设置为默认区域以外的其他区域,则应在执行此操作后进行这些调用。

答案 2 :(得分:1)

单独获取一天,大写它,然后获取剩余的日期并附加它。像这样:

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