Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does the weekdaySymbol list always start with Sunday in any country?

I have this code:

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

it outputs:

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

My question is:

If the user is in a country other than US, let's say France or Russia, will the array still start with Sunday (not Monday), or should I not rely on this?

The thing is I set alarm days. Visually, the user chooses from a table view, which always has Monday in the first row. And I keep 0 or 1 in an NSMutableArray based on the fact if the day is set or not. If daysNames[0] always corresponds to Sunday, I can easily shift all the elements one position to the right, and everything will map correctly, otherwise I have some more headaches dealing with one more case when week starts with Monday, not Sunday.

This is the full code I wrote for this (in United States it works perfectly):

// 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:@" "];
like image 751
ppalancica Avatar asked Dec 04 '14 03:12

ppalancica


1 Answers

I just put my logic for Swift 4.

let dateFormatter = DateFormatter()
var weekDays: [String] = dateFormatter.weekdaySymbols
if weekDays[0] == "Sunday" {
     weekDays.append(weekDays[0])
     weekDays.remove(at: 0)
}
print(weekDays)

Check if first day is Sunday then first append "Sunday" in the Array list and remove it from first index.

like image 108
Govaadiyo Avatar answered Nov 15 '22 20:11

Govaadiyo