Гарантируется ли «день недели» в диапазоне [1: 7]? - PullRequest
0 голосов
/ 30 сентября 2019

Я верю, что ответ - да, но документация Apple подразумевает, что ответ - нет.

Единицами дня недели являются числа от 1 до n, где n - количество дней в неделе. Например, в григорианском календаре n равно 7, а воскресенье - 1. день недели

Эта цитата, по-видимому, предполагает наличие альтернативных длин недели для разных календарных систем. Проведя некоторые исследования в Википедии, я не смог найти ни одного современного календаря, где n != 7.

Я неправильно понял? Есть ли в Фонде какие-нибудь Календари, в которых есть недели, когда n != 7?

1 Ответ

1 голос
/ 30 сентября 2019

Это не обязательно гарантия, но следующий код не находит календарь ни для одной локали, у которой нет диапазона дня недели, кроме 1..<8.

let calIds: [Calendar.Identifier] = [ .buddhist, .chinese, .coptic, .ethiopicAmeteAlem, .ethiopicAmeteMihret, .gregorian, .hebrew, .indian, .islamic, .islamicCivil, .islamicTabular, .islamicUmmAlQura, .iso8601, .japanese, .persian, .republicOfChina]
for calId in calIds {
    var cal = Calendar(identifier: calId)
    for locId in Locale.availableIdentifiers {
        let locale = Locale(identifier: locId)
        cal.locale = locale

        if let weekdayMin = cal.minimumRange(of: .weekday), let weekdayMax = cal.maximumRange(of: .weekday) {
            if weekdayMin == weekdayMax {
                if weekdayMin.startIndex != 1 || weekdayMin.count != 7 {
                    print("Calendar \(calId) with locale \(locId) isn't 1..<8: \(weekdayMin)")
                }
            } else {
                print("Calendar \(calId) with locale \(locId) has a different min and max weekday range: \(weekdayMin) - \(weekdayMax)")
            }
        } else {
            print("Calendar \(calId) with locale \(locId) doesn't have both a min and max weekday range")
        }
    }
}
...