获取不超过两个字母的日历工作日符号
Getting Calendar weekday symbols consisting of no more than two letters
我需要以最短的格式(两个字母)获取工作日符号。我使用 Calendar
的 shortStandaloneWeekdaySymbols
属性,但是这个 return 的星期几包含三个字母:
Calendar.current.shortStandaloneWeekdaySymbols
结果:
["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
我想得到这样的东西(英语):
["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]
可以通过 String
的 removeLast()
方法手动删除最后一个字符,但是,我认为对于某些语言环境,结果是错误的。
那么,有没有办法从 Calendar
.
return 两个字母的工作日符号
Calendar
不提供 built-in 属性来获取工作日名称的 two-letter 缩写。但是,日期格式的 Unicode 标准确实提供了您所需要的。 EEEEEE
格式给出 two-letter 工作日名称,cccccc
给出 two-letter 独立工作日名称。
这是一个 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: [=10=]), 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)
这已经针对每个日历的每个语言环境进行了测试,force-unwraps 的 none 导致了一个问题。
我需要以最短的格式(两个字母)获取工作日符号。我使用 Calendar
的 shortStandaloneWeekdaySymbols
属性,但是这个 return 的星期几包含三个字母:
Calendar.current.shortStandaloneWeekdaySymbols
结果:
["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
我想得到这样的东西(英语):
["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]
可以通过 String
的 removeLast()
方法手动删除最后一个字符,但是,我认为对于某些语言环境,结果是错误的。
那么,有没有办法从 Calendar
.
Calendar
不提供 built-in 属性来获取工作日名称的 two-letter 缩写。但是,日期格式的 Unicode 标准确实提供了您所需要的。 EEEEEE
格式给出 two-letter 工作日名称,cccccc
给出 two-letter 独立工作日名称。
这是一个 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: [=10=]), 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)
这已经针对每个日历的每个语言环境进行了测试,force-unwraps 的 none 导致了一个问题。