2013-09-07 4 views
1

У меня есть странная ситуация, но здесь идет. Я пытаюсь сказать, если одно время между двумя другими. Я получил эту работу. Проблема в том, что второй раз будет на следующий день. Так, например, в первый раз будет 8 вечера, а второй раз будет 8 утра. И проблема в том, что когда я сравниваю два раза, компьютер думает, что 8 утра до 8 вечера. Так что это мой главный вопрос. Как я делаю это так, чтобы второй день был на следующий день после первого или завтра в некотором смысле. как если бы сегодня было первое, первый раз был бы 8 вечера первым, но второй раз был бы 8 утра вторым.Добавление 1 дня к моменту


Редактировать

Мой код до сих пор

NSDate *notificationDate = 
    [NSDate dateWithTimeInterval:data.postureInterval sinceDate:[NSDate date]]; 

if([notificationDate compare:data.sleepModeBegin] == NSOrderedDescending && 
    [notificationDate compare:data.sleepModeEnd] == NSOrderedAscending) 
{ 
    NSLog(@"IT works"); 
} 

уведомление произойдет = 8:30 вечера

data.sleepModeBegin = 8 вечера

data.sleepModeEnd = 8 am

Я хочу его так, что он записывает это работает, а потому, что второй из них 8 часов утра, он думает, что его утро, когда я хочу синицы быть tomrrow утра


Редактировать

Моего код после Martins ответа

NSCalendar *cal = [NSCalendar currentCalendar]; 
    NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; 
    [dateComponents setDay:1]; 
    NSDate *sleepEndTomorrow = [cal dateByAddingComponents:dateComponents toDate:data.sleepModeEnd options:0]; 

    NSDate *notificationToHappen = [NSDate dateWithTimeInterval:data.postureInterval sinceDate:[NSDate date]]; 

    NSLog(@"%@", notificationToHappen); 
    NSLog(@"%@", data.sleepModeBegin); 
    NSLog(@"%@", data.sleepModeEnd); 
    NSLog(@"%@", sleepEndTomorrow); 
    NSLog(@"%@", [NSDate date]); 

    if (([notificationToHappen compare:data.sleepModeBegin] == NSOrderedDescending) && ([notificationToHappen compare:sleepEndTomorrow] == NSOrderedAscending)) { 
     NSLog(@"HEY"); 
    } 

Первый DatePicker установлен в 3 вечера

второй DatePicker установлен в 8 утра

выход

2013-09-07 16:04:22.981 MyPosturePal[40145:a0b] 2013-09-07 20:15:22 +0000 
2013-09-07 16:04:22.982 MyPosturePal[40145:a0b] 2013-09-06 19:00:41 +0000 
2013-09-07 16:04:22.982 MyPosturePal[40145:a0b] 2013-09-06 12:00:41 +0000 
2013-09-07 16:04:22.982 MyPosturePal[40145:a0b] 2013-09-07 12:00:41 +0000 
2013-09-07 16:04:22.983 MyPosturePal[40145:a0b] 2013-09-07 20:04:22 +0000 
+0

Если вы используете 'объекты NSDate', это не должно быть проблемой. Затем вы можете использовать метод 'compare', чтобы сравнить их,' NSDateFormatter', чтобы отформатировать их в '@" ha ", чтобы получить' @ "8 утра" и т. Д. – Rob

+0

Трудно ответить на ваш вопрос без дополнительной информации как ваше время хранится. - Вы должны использовать 'NSDate', который представляет« дату + время ». Для таких вычислений, как «добавление одного дня», вы должны прочитать [«Выполнение расчётов календаря»] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtCalendricalCalculations.html#// apple_ref/doc/uid/TP40007836-SW1) в «Руководстве по программированию даты и времени». –

+0

Я использую метод сравнения, загрузите мой код –

ответ

2

NSDate представляет собой абсолютный момент времени (включая день). Выбор даты в режиме «только время» возвращает выбранное время вместе с «текущим днем».

Если вы хотите добавить один день, используйте NSCalendar и NSDateComponents:

NSCalendar *cal = [NSCalendar currentCalendar]; 
NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; 
[dateComponents setDay:1]; 
NSDate *sleepEndTomorrow = [cal dateByAddingComponents:dateComponents 
            toDate:sleepEndToday options:0]; 
+0

На самом деле я снова столкнулся с проблемой. Время записывает время на следующий день, но когда я иду сравнивать их, он действует так же, как и раньше. Я загружу свой код, чтобы показать вам, что у меня есть сейчас. –

+0

@ user2757277: Вы также забыли добавить вывод NSLog. –

+0

Извините, обновлено сейчас –

-4

Вы можете конвертировать раз EPOC секунд - метод nstime timeIntervalSince1970 будет ответом на Objective-C.

+1

Не могли бы вы объяснить немного больше о том, как это сделать? –

+0

Преобразование между секундами и днями на самом деле удивительно сложно. Дни не всегда одинаковы! Пусть NSDateComponents обрабатывают его для вас. –

Смежные вопросы