Получение календарных символов дня недели, состоящих не более чем из двух букв - PullRequest
0 голосов
/ 14 июня 2019

Мне нужно получить символы дня недели, но в их самом коротком формате (две буквы). Я использую Calendar 's shortStandaloneWeekdaySymbols свойство, однако это возвращает дни недели с тремя буквами:

Calendar.current.shortStandaloneWeekdaySymbols

И результат:

["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]

Я хотел бы получить что-то вроде этого (для английского):

["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]

Можно удалить последний символ вручную, с помощью removeLast() метода String, однако, я думаю, для некоторых локалей результат будет неправильным.

Итак, есть ли способ вернуть двухбуквенные символы дня недели из Calendar.

1 Ответ

1 голос
/ 14 июня 2019

Calendar не предоставляет встроенных свойств для получения двухбуквенных сокращений для названий дней недели. Однако стандарт Unicode для форматирования даты действительно обеспечивает то, что вам нужно. Формат EEEEEE дает двухбуквенное название дня недели, а cccccc - двухбуквенное название дня недели.

Вот расширение Calendar, которое дает вам следующие значения:

extension Calendar {
    var shorterWeekdaySymbols: [String] {
        return symbolsFor("EEEEEE")
    }

    var shorterStandaloneWeekdaySymbols: [String] {
        return symbolsFor("cccccc")
    }

    private func symbolsFor(_ format: String) -> [String] {
        let df = DateFormatter()
        df.locale = self.locale
        df.calendar = self
        df.dateFormat = format
        let weekdays = self.range(of: .weekday, in: .year, for: Date())!
        return weekdays.map {
            let date = self.nextDate(after: Date(), matching: DateComponents(weekday: $0), matchingPolicy: .strict)!
            return df.string(from: date)
        }
    }
}

Пример использования:

print(Calendar.current.shorterWeekdaySymbols)
print(Calendar.current.shorterStandaloneWeekdaySymbols)

И пример для Испании:

var calES = Calendar.current
calES.locale = Locale(identifier: "es_ES")
print(calES.shorterWeekdaySymbols)
print(calES.shorterStandaloneWeekdaySymbols)

Это было проверено в каждой локали для каждого календаря, и ни одно из принудительных развертываний не вызвало проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...