ppa*_*ica 7 cocoa-touch locale ios nslocale swift
我有这个代码:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSMutableArray *daysNames = [NSMutableArray arrayWithArray:dateFormatter.weekdaySymbols];
NSLog(@"daysNames = %@", daysNames);
Run Code Online (Sandbox Code Playgroud)
它输出:
daysNames = (
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
)
Run Code Online (Sandbox Code Playgroud)
我的问题是:
如果用户位于美国以外的其他国家/地区,让我们说法国或俄罗斯,阵列是否仍然从星期日(而不是星期一)开始,或者我不应该依赖于此?
事情是我设置闹钟日.在视觉上,用户从表视图中选择,该视图在第一行中始终具有星期一.如果日期设置与否,我会根据事实在NSMutableArray中保留0或1.如果daysNames [0]总是对应于星期日,我可以轻松地将所有元素向右移动一个位置,并且一切都将正确映射,否则当周星期一开始而不是星期日时,我还会遇到更多令人头疼的问题.
这是我为此写的完整代码(在美国它运作完美):
// Set the short days names
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSMutableArray *daysNames = [NSMutableArray arrayWithArray:dateFormatter.weekdaySymbols];
NSLog(@"daysNames = %@", daysNames);
// daysNames will become @"SUN MON TUE WED THU FRI SAT";
for (NSInteger i = 0; i < daysNames.count; i++) {
NSUInteger length = ((NSString *)daysNames[i]).length;
if (length > 3) {
length = 3;
}
daysNames[i] = [daysNames[i] substringToIndex:length].uppercaseString;
}
NSString *sundayShortName = daysNames[0];
// daysNames will become @"MON TUE WED THU FRI SAT SUN";
for (NSInteger i = 1; i < daysNames.count; i++) {
daysNames[i - 1] = daysNames[i];
}
daysNames[daysNames.count - 1] = sundayShortName;
NSMutableArray *alarmDaysShortNames = [NSMutableArray array];
for (NSInteger i = 0; i < alarm.alarmDays.count; i++) {
if ([alarm.alarmDays[i] boolValue] == YES) {
[alarmDaysShortNames addObject:daysNames[i]];
}
}
alarmCell.alarmDaysLabel.text = [alarmDaysShortNames componentsJoinedByString:@" "];
Run Code Online (Sandbox Code Playgroud)
不确定是否理解,但这是建议的解决方案,在 Swift 中:
let shortWeekdaySymbols = Calendar.current.shortWeekdaySymbols
let localizedWeekdays: [String] = Array(shortWeekdaySymbols[Calendar.current.firstWeekday - 1 ..< Calendar.current.shortWeekdaySymbols.count] + shortWeekdaySymbols[0 ..< Calendar.current.firstWeekday - 1])
Run Code Online (Sandbox Code Playgroud)
wherelocalizedWeekdays是一个数组,其中包含 CalendarweekdaySymbols属性中包含的所有工作日的本地化顺序。