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

sye*_*dfa 3 nsdate nsdateformatter ios

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

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

我的输出是:12月10日星期二,我想显示:TUE,12月10日.

我的问题是,星期几只有首字母大写,而不是整天(即我得到"星期二",我想显示"TUE").月份的格式很好(即"Dec"我很满意).我已经检查了日期格式的规格,遗憾的是,使用NSDateFormatter类没有传统方法.有没有办法解决这个问题,仍然可以在一周中将所有缩写字母大写,而不会触及月份?

在此先感谢所有回复的人.

rma*_*ddy 10

没有办法直接使用日期格式化程序.最简单的方法是在格式化日期后处理字符串.

NSString *dateString = [dateFormat stringFromDate:today];
dateString = [NSString stringWithFormat:@"%@%@", [[dateString substringToIndex:3] uppercaseString], [dateString substringFromIndex:3]];
Run Code Online (Sandbox Code Playgroud)

更新:

以上假设EEE总是给出3个字母的工作日缩写.有可能存在某些区域设置或语言,此假设无效.那么更好的解决方案如下:

NSString *dateString = [dateFormat stringFromDate:today];
NSRange commaRange = [dateString rangeOfString:@","];
dateString = [NSString stringWithFormat:@"%@%@", [[dateString substringToIndex:commaRange.location] uppercaseString], [dateString substringFromIndex:commaRange.location]];
Run Code Online (Sandbox Code Playgroud)


bol*_*iva 7

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

dateFormatter.shortWeekdaySymbols = dateFormatter.shortWeekdaySymbols.map { $0.localizedUppercase }
dateFormatter.monthSymbols = dateFormatter.monthSymbols.map { $0.localizedCapitalized }
Run Code Online (Sandbox Code Playgroud)

如果您需要将格式化程序的语言环境设置为默认值以外的语言环境,则应在执行此操作后进行这些调用。