ios - 获取包含不超过两个字母的日历工作日符号
问题描述
我需要获取工作日符号,但格式最短(两个字母)。我使用Calendar
'shortStandaloneWeekdaySymbols
属性,但是这会返回带有三个字母的星期几:
Calendar.current.shortStandaloneWeekdaySymbols
结果:
["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
我想得到这样的东西(英语):
["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]
可以通过String
'sremoveLast()
方法手动删除最后一个字符,但是,我认为,对于某些语言环境,结果是错误的。
那么,有没有办法从Calendar
.
解决方案
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)
这已经在每个日历的每个语言环境中进行了测试,并且没有任何强制展开导致问题。
推荐阅读
- powershell - 是否可以在没有 Remove-Item 的情况下访问被破坏的别名?
- excel - 按值对集合进行排序
- php - 如何在 laravel 中将连接查询显示到视图中
- windows - Ionic Windows 8.1 应用程序中的应用程序关闭事件?
- javascript - 我想用 .map() 显示我的状态
- html - .Net Bootstrap Col Md 都转到 Internet Explorer 的页面中心
- amazon-web-services - IIS 托管应用程序在访问网页时停止
- drupal - 我应该为我的新网站使用哪个版本的 drupal?
- php - 将原始 sql 转换为 laravel 查询生成器
- python - 如何在 Python 上绘制包含 txt 文件(带有数据集)的 csv 文件