Swift中Calendar的veryShortWeekdaySymbols如何设置从周一开始显示
问题原因
Calendar的veryShortWeekdaySymbols、shortWeekdaySymbols、weekdaySymbols返回值顺序是固定的,永远以周日作为第一个元素,和firstWeekday属性的设置无关。firstWeekday只会影响日历的周计算逻辑(比如周数统计、日期范围匹配),不会修改符号数组的默认排序。
实现方案
你可以根据设置的firstWeekday值,对符号数组做手动切片重排即可,参考代码如下:
var calendar = Calendar.current // 设置周首日为周一(系统规则:1代表周日,2代表周一,以此类推) calendar.firstWeekday = 2 let originSymbols = calendar.veryShortWeekdaySymbols // 从firstWeekday对应的索引位置拆分数组,重新拼接 let startIndex = originSymbols.index(originSymbols.startIndex, offsetBy: calendar.firstWeekday - 1) let sortedSymbols = Array(originSymbols[startIndex...] + originSymbols[..<startIndex]) print(sortedSymbols) // 输出结果:["M", "T", "W", "T", "F", "S", "S"]
补充说明
- 该重排逻辑对
shortWeekdaySymbols、完整weekdaySymbols同样适用,替换对应属性即可。 - 如果需要适配不同地区的默认周首日规则,直接读取系统当前
Calendar的firstWeekday属性做偏移计算即可,无需手动写死偏移量。
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

