Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在iOS中的NSDateFormatter对象中大写缩写的星期几_Ios_Nsdate_Nsdateformatter - Fatal编程技术网

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

尝试在iOS中的NSDateFormatter对象中大写缩写的星期几,ios,nsdate,nsdateformatter,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(

我正在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日,我想显示:星期二,12月10日

但我的问题是,一周中的某一天只有第一个字母大写,而不是整个一天(即,我得到的是“Tue”,我想显示“Tue”)。这个月的格式很好(即“Dec”我很满意)


我已经检查了日期格式的规范,不幸的是,使用NSDateFormatter类没有常规的方法来执行此操作。有没有办法在不涉及月份的情况下,仍然将一周中的所有缩写字母大写?

直接使用日期格式化程序无法做到这一点。最简单的方法是在格式化日期后处理字符串

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]];

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

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

被接受的答案并不能真正解决问题。与注释一样,可以在DateFormatter实例上设置(标准/短/长/等)工作日/月符号:

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

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

也许您应该在NSDateFormatter上执行SetShortweekDaySymarks<代码>[dateFormat setShortWeekdaySymbols:@[@“太阳”、“周一”、“周一”…]@SamBudda不会的。格式为
EEE
,通常在工作日提供三个字母。因此,
星期四
变成了
星期四
@rmaddy,这与从苹果日期格式化程序文档链接到的本文档相反:-它给出了EEE的4个字母示例,例如:星期天:e-1..3-Tues@Jasarien我明白你在说什么,但在现实生活中,当我使用
EEE
时,我总是得到一个三个字母的工作日缩写。我从未见过
EEE
给出4个字母的结果。它是否返回本地化名称?一个本地化的名字有可能超过3个吗?@Jasarien这是个好问题。我想有一个区域设置,
EEE
给出的不是3个字母的工作日名称。我会更新我的答案来处理这个问题。