Когда мое приложение запущено, я хочу проверить, находится ли дата между 9: 00-18: 00.
И теперь я могу использовать время NSDate
. Как я могу проверить время?
Когда мое приложение запущено, я хочу проверить, находится ли дата между 9: 00-18: 00.
И теперь я могу использовать время NSDate
. Как я могу проверить время?
Так много ответов и так много недостатков...
Вы можете использовать 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
- путь.;)
Создайте даты для 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");
}