【问题标题】:Is `weekday` guaranteed to be in the range [1:7]?`weekday` 是否保证在 [1:7] 范围内?
【发布时间】:2020-01-30 03:14:32
【问题描述】:

我相信答案是肯定的,但 Apple 的文档暗示答案是否定的。

工作日单位是从 1 到 n 的数字,其中 n 是一周中的天数。例如,在公历中,n 为 7,星期日用 1 表示。weekday

这句话似乎暗示不同的日历系统有不同的周长。在对 Wikipedia 进行一些研究后,我找不到任何现代日历,其中 n != 7

我是不是看错了? Foundation 中是否有任何日历具有 n != 7 的周数?

【问题讨论】:

  • 是的,weekday 保证(至少对于 iOS 中可用的日历)在范围内,我解释文档所指的是不同日历中的工作日数字不同。星期日在公历中用 1 表示,但不一定是其他的。
  • @esesmuedgars 我知道不同的日历从不同的日子开始。措辞暗示 n 并不总是 = 7。至少对我来说是这样。我认为,“在所有日历系统中 n = 7,而在公历中,星期日由 1 表示”更清楚一点。

标签: ios date calendar foundation


【解决方案1】:

这不一定是保证,但以下代码找不到除 1..<8 以外的任何区域设置的日历。

let calIds: [Calendar.Identifier] = [ .buddhist, .chinese, .coptic, .ethiopicAmeteAlem, .ethiopicAmeteMihret, .gregorian, .hebrew, .indian, .islamic, .islamicCivil, .islamicTabular, .islamicUmmAlQura, .iso8601, .japanese, .persian, .republicOfChina]
for calId in calIds {
    var cal = Calendar(identifier: calId)
    for locId in Locale.availableIdentifiers {
        let locale = Locale(identifier: locId)
        cal.locale = locale

        if let weekdayMin = cal.minimumRange(of: .weekday), let weekdayMax = cal.maximumRange(of: .weekday) {
            if weekdayMin == weekdayMax {
                if weekdayMin.startIndex != 1 || weekdayMin.count != 7 {
                    print("Calendar \(calId) with locale \(locId) isn't 1..<8: \(weekdayMin)")
                }
            } else {
                print("Calendar \(calId) with locale \(locId) has a different min and max weekday range: \(weekdayMin) - \(weekdayMax)")
            }
        } else {
            print("Calendar \(calId) with locale \(locId) doesn't have both a min and max weekday range")
        }
    }
}

【讨论】:

  • 最小/最大范围正是我所需要的。我在阅读文档时一定忽略了它们。回去后,我尝试使用range(of:in:for:),但奇怪的是没有Component.week。运行您的脚本后,我可能只是硬编码 7 或使用范围函数之一。感谢您的帮助
猜你喜欢
  • 2015-08-16
  • 2011-05-04
  • 1970-01-01
  • 2021-05-28
  • 2019-08-25
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 2023-04-03
相关资源
最近更新 更多