2014-11-26 8 views
6

Oggi è Mercoledì e ho questo codiceSwift - giorno della settimana alla posizione corrente currentCalendar()

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

dayOfWeek è 4, ma oggi è 3 ° giorno della settimana in Bulgaria. È in USA oggi è il 4 ° giorno della settimana? E come determinare quando inizia la settimana in diversi paesi e regioni? Sul mio iPhone locale e calendario sono impostati sul calendario bulgaro e locale e sa che la settimana inizia lunedì sul mio iMac anche, ma quando eseguo il codice mi scrive 4 ...

risposta

18

Per il calendario gregoriano, il weekday proprietà di NSDateComponents è sempre 1 per Domenica, 2 per Lunedi ecc

NSCalendar.currentCalendar().firstWeekday 

dà la (indice del) primo giorno della settimana nella localizzazione corrente, che potrebbe essere 1 in USA e 2 in Bulgaria. Pertanto

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

è il giorno della settimana in base alle impostazioni locali. Come un one-liner:

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

Aggiornamento per Swift 3:

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

per chiarire questo per gli altri, non credo che il 'calendar.firstWeekday' è l ' "indice del primo giorno della settimana ". Il valore 1 corrisponde alla domenica e il 2 corrisponde al lunedì, come per 'NSDateComponents'. Per favore correggimi se mi manca qualcosa. – blwinters