Как проверить, находится ли сейчас дата в течение 9: 00-18: 00 Когда мое приложение запущено, я хочу проверить, находится ли дата между 9: 00-18: 00. И теперь я могу использовать время NSDate. Как я могу проверить время? Ответ 1 Так много ответов и так много недостатков... Вы можете использовать NSDateFormatter, чтобы получить удобную строку с даты. Но это плохая идея очень использовать эту строку для сравнения дат! Пожалуйста, игнорируйте любой ответ на свой вопрос, который включает в себя использование строк... Если вы хотите получать информацию о дате, месяце, дне, часе, минуте и т.д., вы должны использовать NSCalendar и NSDateComponents. Чтобы проверить, существует ли дата между 9:00 и 18:00, вы можете сделать следующее: NSDate *date = [NSDate date]; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *dateComponents = [calendar components:NSHourCalendarUnit fromDate:date]; if (dateComponents.hour >= 9 && dateComponents.hour < 18) { NSLog(@"Date is between 9:00 and 18:00."); } EDIT: Упс, используя dateComponents.hour <= 18 приведет к неправильным результатам для дат вроде 18:01. dateComponents.hour < 18 - путь.;) Ответ 2 Создайте даты для 09:00 и 18:00 сегодня и сравните текущее время с этими датами: NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDate *now = [NSDate date]; NSDateComponents *components = [cal components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:now]; [components setHour:9]; [components setMinute:0]; [components setSecond:0]; NSDate *nineHundred = [cal dateFromComponents:components]; [components setHour:18]; NSDate *eighteenHundred = [cal dateFromComponents:components]; if ([nineHundred compare:now] != NSOrderedDescending && [eighteenHundred compare:now] != NSOrderedAscending) { NSLog(@"Date is between 09:00 and 18:00"); }
Ответ 1 Так много ответов и так много недостатков... Вы можете использовать NSDateFormatter, чтобы получить удобную строку с даты. Но это плохая идея очень использовать эту строку для сравнения дат! Пожалуйста, игнорируйте любой ответ на свой вопрос, который включает в себя использование строк... Если вы хотите получать информацию о дате, месяце, дне, часе, минуте и т.д., вы должны использовать NSCalendar и NSDateComponents. Чтобы проверить, существует ли дата между 9:00 и 18:00, вы можете сделать следующее: NSDate *date = [NSDate date]; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *dateComponents = [calendar components:NSHourCalendarUnit fromDate:date]; if (dateComponents.hour >= 9 && dateComponents.hour < 18) { NSLog(@"Date is between 9:00 and 18:00."); } EDIT: Упс, используя dateComponents.hour <= 18 приведет к неправильным результатам для дат вроде 18:01. dateComponents.hour < 18 - путь.;)
Ответ 2 Создайте даты для 09:00 и 18:00 сегодня и сравните текущее время с этими датами: NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDate *now = [NSDate date]; NSDateComponents *components = [cal components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:now]; [components setHour:9]; [components setMinute:0]; [components setSecond:0]; NSDate *nineHundred = [cal dateFromComponents:components]; [components setHour:18]; NSDate *eighteenHundred = [cal dateFromComponents:components]; if ([nineHundred compare:now] != NSOrderedDescending && [eighteenHundred compare:now] != NSOrderedAscending) { NSLog(@"Date is between 09:00 and 18:00"); }