获取不超过两个字母的日历工作日符号

时间:2019-06-14 18:21:02

标签: ios swift string calendar

我需要获取工作日符号,但格式要最短(两个字母)。我使用Calendar的{​​{1}}属性,但这返回星期几,其中包含三个字母:

shortStandaloneWeekdaySymbols

结果:

Calendar.current.shortStandaloneWeekdaySymbols

我想得到这样的东西(英语):

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

可以通过["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"] 的{​​{1}}方法手动删除最后一个字符,但是,我认为,对于某些语言环境,结果将是错误的。

因此,有一种方法可以从String返回两个字母的工作日符号。

1 个答案:

答案 0 :(得分:1)

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)

这已针对每个日历在每个语言环境下进行了测试,并且没有任何强制拆包引起问题。