Swift - 通过 currentCalendar() 按当前位置确定工作日

问题描述 投票:0回答:3

今天是星期三,我有这个代码

let calendar:NSCalendar = NSCalendar.currentCalendar()
let dateComps:NSDateComponents = calendar.components(.CalendarUnitWeekday , fromDate: NSDate())
let dayOfWeek:Int = dateComps.weekday

dayOfWeek 是 4,但今天是保加利亚一周的第三天。 在美国今天是一周的第四天吗?不同国家和地区如何确定一周的开始时间? 在我的 iPhone 上,区域设置和日历设置为保加利亚日历和区域设置,并且它知道在我的 iMac 上一周也是从星期一开始,但是当我执行代码时,它会向我写入 4...

ios swift calendar location weekday
3个回答
35
投票

对于公历,

weekday
NSDateComponents
属性始终为 1 表示周日,2 表示周一,依此类推

NSCalendar.currentCalendar().firstWeekday

给出当前区域设置中第一个工作日的(索引),在美国可能是 1 保加利亚有 2 个。因此

var dayOfWeek = dateComps.weekday + 1 - calendar.firstWeekday
if dayOfWeek <= 0 {
    dayOfWeek += 7
}

是根据您所在区域设置的星期几。作为一句:

let dayOfWeek = (dateComps.weekday + 7 - calendar.firstWeekday) % 7 + 1

更新 Swift 3:

let calendar = Calendar.current
var dayOfWeek = calendar.component(.weekday, from: Date()) + 1 - calendar.firstWeekday
if dayOfWeek <= 0 {
    dayOfWeek += 7
}

0
投票

如果您想知道周末是哪一天,您可以使用此扩展程序:

extension Calendar {

    /// Return the weekSymbol index for the first week end day
    var firstWeekendDay: Int {
        let firstWeekDay = self.firstWeekday
        return (firstWeekDay - 2) >= 0 ? firstWeekDay - 2 : firstWeekDay - 2 + 7
    }

    /// Return the weekSymbol index for the second week end day
    var secondWeekendDay: Int {
        let firstWeekDay = self.firstWeekday
        return (firstWeekDay - 1) >= 0 ? firstWeekDay - 1 : firstWeekDay - 1 + 7
    }

}

© www.soinside.com 2019 - 2024. All rights reserved.