如何在用户的区域设置中获取星期几的名称?

Sim*_*mon 16 cocoa-touch localization objective-c ios

我有一个介于1和7之间的数字,我希望将其转换为用户的语言环境,相当于周一到周日.我可以这样做,如果是这样,怎么样?

Jos*_*ell 24

一个NSDateFormatter可以给你的名称列表:

NSDateFormatter * df = [[NSDateFormatter alloc] init];
[df setLocale: [NSLocale currentLocale]];
NSArray * weekdays = [df weekdaySymbols];
Run Code Online (Sandbox Code Playgroud)

然后,您可以像任何其他数组一样进行索引[weekdays objectAtIndex:dayIdx];但是,请注意,第一个工作日可能因区域设置而异; 究竟如何变化(以及许多其他事情NSCalendar)在文档中没有特别好地解释.

  • 仅供参考 - 根据iOS 7.1到iOS 8.0的API差异,(但不是实际的参考文档),`weekdaySymbols`方法已从`NSDateFormatter`弃用,并成为`NSCalendar`类的类方法. (2认同)

gav*_*net 7

当然可以.下面是一个方法/函数,它返回0到6范围内工作日编号的工作日名称.

Objective C版本:

- (NSString *)weekdayNameFromWeekdayNumber:(NSInteger)weekdayNumber
{
    NSCalendar *calendar = [NSCalendar currentCalendar];

    // Fetch the days of the week in words for the current language (Sunday to Saturday)
    NSArray *weekdaySymbols = calendar.weekdaySymbols;

    // Because the first week day changes depending on the region settings.
    //  ie. In Bangladesh the first day of the week is Friday. In UK it is Monday
    NSInteger index = (weekdayNumber + calendar.firstWeekday - 1) % 7;
    return weekdaySymbols[index];
}
Run Code Online (Sandbox Code Playgroud)

和Swift 2版本:

func weekdayNameFromWeekdayNumber(weekdayNumber: Int) -> String {
    let calendar = NSCalendar.currentCalendar()
    let weekdaySymbols = calendar.weekdaySymbols
    let index = (weekdayNumber + calendar.firstWeekday - 1) % 7
    return weekdaySymbols[index]
}
Run Code Online (Sandbox Code Playgroud)

和Swift 3.0版本:

func weekdayNameFrom(weekdayNumber: Int) -> String {
    let calendar = Calendar.current
    let weekdaySymbols = calendar.weekdaySymbols
    let index = (weekdayNumber + calendar.firstWeekday - 1) % 7
    return weekdaySymbols[index]
}
Run Code Online (Sandbox Code Playgroud)


Nyc*_*cen 6

这是我的看法:

Swift 3,iOS8以上

func weekdayNameFrom(weekdayNumber: Int) -> String {
    let calendar = Calendar.current
    let dayIndex = ((weekdayNumber - 1) + (calendar.firstWeekday - 1)) % 7
    return calendar.weekdaySymbols[dayIndex]
}
Run Code Online (Sandbox Code Playgroud)

请注意,您有3个可用列表:

  • weekdaySymbols -> ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
  • shortWeekdaySymbols -> ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
  • veryShortWeekdaySymbols -> ["S", "M", "T", "W", "T", "F", "S"]