How do I get the name of a day of the week in the user's locale?

跟風遠走 提交于 2019-12-29 05:47:27

问题


I have a number between 1 and 7, which I want to turn into the user's locale's equivalent of Monday to Sunday. Can I do that and if so, how?


回答1:


An NSDateFormatter can give you the list of names:

NSDateFormatter * df = [[NSDateFormatter alloc] init];
[df setLocale: [NSLocale currentLocale]];
NSArray * weekdays = [df weekdaySymbols];

Which you can then index like any other array [weekdays objectAtIndex:dayIdx]; Be aware, however, that the first weekday may differ by locale; exactly how it may vary (along with many other things about NSCalendar) is not particularly well-explained in the docs.




回答2:


Sure can. Below is a method / function that returns the weekday name for the weekday number in the range 0 to 6.

The Objective C version:

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

and the Swift 2 version:

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

and Swift 3.0 version:

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



回答3:


Here's my take:

Swift 3, iOS8+

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

Note that you have 3 lists available:

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



回答4:


NSArray *weekdaySymbols = [[NSDateFormatter alloc] weekdaySymbols];

You can use one of {weekdaySymbols, shortWeekdaySymbols, veryShortWeekdaySymbols}




回答5:


I found this solution: You have your date object, you want to get the day of the week out of that object.

  1. Set the locale to your date formatter as show below

    let eventDate = dateFormatter.date(from: self)
    let language = Locale.preferredLanguages.first
    print("The locale id is  \(language)")
    // This date format can be what ever you like, in this case i used EE dd
    dateFormatter.dateFormat = "EE dd"
    if let idiomaLocale = language {
        dateFormatter.locale = Locale(identifier: idiomaLocale)
    } else {
        dateFormatter.locale = Locale(identifier: "es_CO")
    }
    
  2. Doing this you can be sure that you are getting the correct identifier for your date formatter, after that with your date formatter configured you can proceed and get the string of the day of week

    //convert your date to string
    let stringDate = dateFormatter.string(from: eventDate!)
    
    return stringDate
    

I hope this helps somebody :). happy new year.




回答6:


Based on gavdotnet excellent solution, the European version (that starts from Monday) is:

func weekdayNameFromWeekdayNumber(weekdayNumber: Int) -> String {
    var EuroDay = weekdayNumber + 1
    if EuroDay == 7 {
        EuroDay = 0
    }
    let calendar = NSCalendar.currentCalendar()
    let weekdaySymbols = calendar.weekdaySymbols
    let index = EuroDay + calendar.firstWeekday - 1
    return weekdaySymbols[index].uppercaseString
}


来源:https://stackoverflow.com/questions/7330420/how-do-i-get-the-name-of-a-day-of-the-week-in-the-users-locale

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!