2014-12-04 24 views
5

ho questo codice:L'elenco dei giorni della settimana inizia sempre con la domenica in qualsiasi paese?

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
NSMutableArray *daysNames = [NSMutableArray arrayWithArray:dateFormatter.weekdaySymbols]; 
NSLog(@"daysNames = %@", daysNames); 

emette:

daysNames = (
    Sunday, 
    Monday, 
    Tuesday, 
    Wednesday, 
    Thursday, 
    Friday, 
    Saturday 
) 

La mia domanda è:

Se l'utente si trova in un paese diverso da quello degli Stati Uniti, diciamo la Francia o la Russia, sarà l'array inizia ancora con la domenica (non il lunedì) o non dovrei fare affidamento su questo?

Il fatto è che ho impostato giorni di allarme. Visivamente, l'utente sceglie da una vista tabella, che ha sempre lunedì nella prima riga. E mantengo 0 o 1 in un NSMutableArray in base al fatto se il giorno è impostato o meno. Se daysNames [0] corrisponde sempre alla domenica, posso spostare facilmente tutti gli elementi di una posizione a destra, e tutto verrà mappato correttamente, altrimenti ho qualche altro mal di testa che riguarda un altro caso quando la settimana inizia con il lunedì, non con la domenica.

Questo è il codice completo che ho scritto per questo (in Stati Uniti funziona perfettamente):

// Set the short days names 

     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     NSMutableArray *daysNames = [NSMutableArray arrayWithArray:dateFormatter.weekdaySymbols]; 
     NSLog(@"daysNames = %@", daysNames); 

     // daysNames will become @"SUN MON TUE WED THU FRI SAT"; 
     for (NSInteger i = 0; i < daysNames.count; i++) { 

      NSUInteger length = ((NSString *)daysNames[i]).length; 

      if (length > 3) { 
       length = 3; 
      } 

      daysNames[i] = [daysNames[i] substringToIndex:length].uppercaseString; 
     } 

     NSString *sundayShortName = daysNames[0]; 

     // daysNames will become @"MON TUE WED THU FRI SAT SUN"; 
     for (NSInteger i = 1; i < daysNames.count; i++) { 

      daysNames[i - 1] = daysNames[i]; 
     } 

     daysNames[daysNames.count - 1] = sundayShortName; 

     NSMutableArray *alarmDaysShortNames = [NSMutableArray array]; 

     for (NSInteger i = 0; i < alarm.alarmDays.count; i++) { 

      if ([alarm.alarmDays[i] boolValue] == YES) { 

       [alarmDaysShortNames addObject:daysNames[i]]; 
      } 
     } 

     alarmCell.alarmDaysLabel.text = [alarmDaysShortNames componentsJoinedByString:@" "]; 
+1

No, in Francia, sarebbe iniziato con Dimanche. Inoltre, i cinesi hanno sei o sette parole differenti per domenica quindi non sono sicuro che un semplice array la taglierà :-) – paxdiablo

+0

Grazie! In realtà non intendevo un nome diverso per il giorno. So che verrà impostato in base alla lingua. Mi chiedo se daysNames [0] sarà ancora domenica (o Dimanche ecc.) Ma non lunedì (o Lunedi ecc.). – ppalancica

+0

Le mie scuse, ho frainteso la domanda. – paxdiablo

risposta

3

Sì. La domenica è sempre il giorno della settimana che viene prima in quella lista. Puoi interrogare NSCalendar per scoprire quale posizione in quell'elenco la settimana è considerata iniziare (domenica per gli americani, lunedì per gli europei, ecc.).

+0

Grazie! Hai appena detto che "la domenica è sempre il giorno della settimana che viene prima in quella lista", ma anche quel "lunedì per gli europei". Puoi controllare l'intero codice che pubblico e confermare che funzionerà in Europa o altrove? Grazie in anticipo! – ppalancica

+1

Tommy, ho provato a cambiare la lingua sul mio iPhone in Russia e in rumeno, e il codice che ho aggiunto alla domanda sembra funzionare correttamente. Puoi dare un'occhiata e confermare che funzionerebbe? Grazie in anticipo! – ppalancica

+1

@ppalancica sì, quello dovrebbe essere corretto. L'elenco sarà sempre (versioni localizzate di) "domenica, lunedì, martedì ..." in questo ordine. Quale indice è il primo giorno della settimana che si ottiene da altrove. Nel tuo caso, se vuoi assumere l'indice 1, il tuo codice è corretto. – Tommy

0

Sì, non si dovrebbe fare affidamento su questo. Se vuoi iniziare il tuo giorno feriale da lunedì piuttosto che domenica. Puoi provare in questo modo: -

NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; 
[gregorian setFirstWeekday:2]; //it is for monday 
Problemi correlati