2014-12-04 26 views
5

mam ten kod:Czy lista weekdaySymbol zawsze zaczyna się od niedzieli w jakimkolwiek kraju?

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

wyprowadza:

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

Moje pytanie brzmi:

Jeżeli użytkownik znajduje się w innym kraju niż USA, powiedzmy, Francję lub Rosję, będzie tablica nadal zaczyna się w niedzielę (nie w poniedziałek), czy nie powinienem polegać na tym?

Chodzi o to, że ustawiłem dni alarmowe. Wizualnie użytkownik wybiera widok tabeli, który zawsze ma poniedziałek w pierwszym wierszu. I utrzymuję 0 lub 1 w NSMutableArray na podstawie faktu, czy dzień jest ustawiony, czy nie. Jeśli daysNames [0] zawsze odpowiada niedzieli, mogę łatwo przesuwać wszystkie elementy o jedną pozycję w prawo, a wszystko będzie poprawnie mapowane, w przeciwnym razie będę mieć więcej problemów związanych z jednym kolejnym przypadkiem, gdy tydzień zaczyna się od poniedziałku, a nie w niedzielę.

Jest to pełny kod pisałem o tym (w Stanach Zjednoczonych działa idealnie):

// 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

Nie, we Francji zaczynałoby się od Dimanche. Poza tym Chińczycy mają sześć lub siedem różnych słów na niedzielę, więc nie jestem pewien, czy prosta tablica go przerwie :-) – paxdiablo

+0

Dziękuję! Właściwie nie miałem na myśli innej nazwy dnia. Wiem, że to będzie ustawione na podstawie języka. Zastanawiam się, czy daysNames [0] nadal będzie w niedzielę (lub Dimanche itp.), Ale nie w poniedziałek (lub Lunedi itp.). – ppalancica

+0

Przepraszam, źle zrozumiałem pytanie. – paxdiablo

Odpowiedz

3

Tak. Niedziela jest zawsze dniem powszednim, który jest pierwszy na tej liście. Możesz przesłuchać NSCalendar, aby dowiedzieć się, na jakiej pozycji na tej liście zaczyna się tydzień (niedziela dla Amerykanów, poniedziałek dla Europejczyków itd.).

+0

Dziękujemy! Właśnie powiedziałeś, że "niedziela jest zawsze dniem powszednim, który pojawia się na pierwszym miejscu na tej liście.", Ale także "poniedziałkiem dla Europejczyków". Czy możesz sprawdzić cały opublikowany przeze mnie kod i potwierdzić, że będzie on działał w Europie i poza nią, czy też nie? Z góry dziękuję! – ppalancica

+1

Tommy, próbowałem zmienić język mojego iPhone'a na rosyjski i rumuński, a kod dodany do tego pytania wydaje się działać dobrze. Czy możesz po prostu przejrzeć to i potwierdzić, że to zadziała? Z góry dziękuję! – ppalancica

+1

@ppalancica tak, to powinno być poprawne. Lista będzie zawsze (zlokalizowane wersje) "niedziela, poniedziałek, wtorek ..." w tej kolejności. Który indeks jest pierwszym dniem tygodnia, który otrzymujesz z innego miejsca. W twoim przypadku, jeśli chcesz założyć indeks 1, twój kod jest poprawny. – Tommy

0

Tak, nie należy polegać na tym. Jeśli chcesz rozpocząć dzień powszedni od poniedziałku, a nie w niedzielę. Możesz spróbować tak: -

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