检查NSDate是星期一还是星期二/等

Sup*_*off 3 cocoa-touch date objective-c nsdate ios

我有一个iOS应用程序,需要根据当天设置几个不同的日期标签.我正在使用NSDateNSDateFormatter做到这一点.但是有些事情我不确定:如果用户的iOS设备的语言/本地化设置为英语以外的其他设置,那么我的if语句会检查当前是"星期一"还是"星期二",停止工作?

这是我的代码:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyyMMdd";
NSDate *date = [NSDate date];

dateFormatter.dateFormat = @"EEEE";
NSString *dayString = [[dateFormatter stringFromDate:date] capitalizedString];
NSLog(@"Day: %@", dayString);


if ([dayString isEqualToString:@"Monday"]) {

}

else if ([dayString isEqualToString:@"Tuesday"]) {

}

else if ([dayString isEqualToString:@"Wednesday"]) {

}

else if ([dayString isEqualToString:@"Thursday"]) {

}

else if ([dayString isEqualToString:@"Friday"]) {

}

else if ([dayString isEqualToString:@"Saturday"]) {

}

else if ([dayString isEqualToString:@"Sunday"]) {

}
Run Code Online (Sandbox Code Playgroud)

deo*_*hal 17

您可以使用以下程序.

NSDateComponents *component = [[NSCalendar currentCalendar] components:NSCalendarUnitWeekday fromDate:[NSDate date]];

switch ([component weekday]) {
    case 1:
        //Sunday
        break;
    case 2:
        //Monday
        break;
    ...
    case 7:
        //Saturday
        break;
    default:
        break;
}
Run Code Online (Sandbox Code Playgroud)


rma*_*ddy 5

虽然答案 usingNSDateComponents是最好的选择,但另一种适用于工作日字符串的可能性是:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"EEEE";
NSDate *date = [NSDate date];
NSString *dayString = [dateFormatter stringFromDate:date];

NSInteger weekdayNum = [[dateFormatter weekdaySymbols] indexOfObject:dayString];
switch (weekdayNum) {
    case 0:
        //Sunday
        break;
    case 1:
        //Monday
        break;
    ...
    case 6:
        //Saturday
        break;
    default:
        break;
}
Run Code Online (Sandbox Code Playgroud)

  • 是的。`NSDateFormatter weekdaySymbols`(以及类中的所有其他符号)将适用于日期格式化程序上设置的任何语言环境(默认为用户的当前语言环境)。但请记住,我将其指出为二流解决方案。另一个答案是,使用 `NSDateComponents` 比进行所有日期格式化和字符串查找要高效得多。 (2认同)