我需要获取工作日符号,但格式要最短(两个字母)。我使用Calendar
的{{1}}属性,但这返回星期几,其中包含三个字母:
shortStandaloneWeekdaySymbols
结果:
Calendar.current.shortStandaloneWeekdaySymbols
我想得到这样的东西(英语):
["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
可以通过["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]
的{{1}}方法手动删除最后一个字符,但是,我认为,对于某些语言环境,结果将是错误的。
因此,有一种方法可以从String
返回两个字母的工作日符号。
答案 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)
这已针对每个日历在每个语言环境下进行了测试,并且没有任何强制拆包引起问题。