Подтвердить что ты не робот

Как получить имя дня недели в пользовательской локали?

У меня есть число от 1 до 7, которое я хочу включить в пользовательский языковой эквивалент с понедельника по воскресенье. Могу ли я это сделать, и если да, то как?

4b9b3361

Ответ 1

NSDateFormatter может предоставить вам список имен:

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

Что вы можете затем индексировать, как любой другой массив [weekdays objectAtIndex:dayIdx]; Помните, однако, что первый будний день может отличаться по языку; как это может измениться (как и многое другое о NSCalendar), не особенно хорошо объяснено в документах.

Ответ 2

Конечно. Ниже приведен метод/функция, которая возвращает имя дня недели для дня недели в диапазоне от 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];
}

и версия 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]
}

и версия 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]
}

Ответ 3

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

Вы можете использовать один из {weekdaySymbols, shortWeekdaySymbols, veryShortWeekdaySymbols}

Ответ 4

На основе отличного решения gavdotnet европейская версия (которая начинается с понедельника):

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
}

Ответ 5

Вот мой прием:

Swift 3, iOS8 +

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

Обратите внимание, что у вас есть 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"]

Ответ 6

Я нашел это решение: У вас есть объект даты, вы хотите получить день недели из этого объекта.

  • Установите языковой стандарт в формат даты, как показано ниже

    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")
    }
    
  • Выполняя это, вы можете быть уверены, что получаете правильный идентификатор для вашего форматирования даты, после чего с настройкой форматирования даты вы можете продолжить и получить строку дня недели.

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

Надеюсь, это поможет кому-то:). с новым годом.