检查 NSDate 是否为 Monday/Tues/etc
Check whether NSDate is Monday/Tues/etc
我有一个 iOS 应用程序需要根据当天设置几个不同的日期标签。我正在使用 NSDate
和 NSDateFormatter
来执行此操作。但是有一些我不确定的事情:如果用户有一个 iOS 设备并且他们的 language/localisation 设置为英语以外的其他东西,那么我的 if 语句会检查它当前是否 "Monday" 或 "Tuesday",停止工作?
这是我的代码:
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"]) {
}
您可以使用以下程序。
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;
}
虽然使用 NSDateComponents
的答案是最佳选择,但使用工作日字符串的另一种可能性是:
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;
}
你Swift,你可以这样做:
let calendar: Calendar = Calendar.current
let isMonday = calendar.component(Calendar.Component.weekday, from: self) == 2
或者您可以使用此 Date
扩展来获取日期的星期几:
extension Date {
enum WeekDay: Int {
case sunday = 1
case monday
case tuesday
case wednesday
case thursday
case friday
case saturday
}
func getWeekDay() -> WeekDay {
let calendar = Calendar.current
let weekDay = calendar.component(Calendar.Component.weekday, from: self)
return WeekDay(rawValue: weekDay)!
}
}
let date = Date()
date.getWeekDay()
我有一个 iOS 应用程序需要根据当天设置几个不同的日期标签。我正在使用 NSDate
和 NSDateFormatter
来执行此操作。但是有一些我不确定的事情:如果用户有一个 iOS 设备并且他们的 language/localisation 设置为英语以外的其他东西,那么我的 if 语句会检查它当前是否 "Monday" 或 "Tuesday",停止工作?
这是我的代码:
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"]) {
}
您可以使用以下程序。
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;
}
虽然使用 NSDateComponents
的答案是最佳选择,但使用工作日字符串的另一种可能性是:
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;
}
你Swift,你可以这样做:
let calendar: Calendar = Calendar.current
let isMonday = calendar.component(Calendar.Component.weekday, from: self) == 2
或者您可以使用此 Date
扩展来获取日期的星期几:
extension Date {
enum WeekDay: Int {
case sunday = 1
case monday
case tuesday
case wednesday
case thursday
case friday
case saturday
}
func getWeekDay() -> WeekDay {
let calendar = Calendar.current
let weekDay = calendar.component(Calendar.Component.weekday, from: self)
return WeekDay(rawValue: weekDay)!
}
}
let date = Date()
date.getWeekDay()