как сравнить время с текущей датой и временем?

В моем приложении я должен выполнить определенную задачу в заданное время. Сначала я рассчитал время выполнения задачи в секундах, а затем добавил это время к текущему, как это.

NSDate *mydate = [NSDate date];
NSTimeInterval TotalDuraionInSec = sec.cal_time * 60;
TaskCmpltTime = [mydate addTimeInterval:TotalDuraionInSec];
NSLog(@"task will be completed at%@",TaskCmpltTime);

теперь я сравниваю время так

if([CurrentTime isEqualToDate:AfterCmpltTime]){
NSLog (@"Time Finish");
}

но я хочу знать, осталось ли время или нет. Текущее время меньше или больше, чем текущее время, как я могу это узнать?


person Nik's    schedule 10.09.2011    source источник


Ответы (3)


У меня есть пример, когда я получаю время от сборщика и проверяю, сегодня это или завтра. Вы должны иметь возможность просто взять код и использовать его по-своему...

int selectedHour =  [customPickerView selectedRowInComponent:0];
int selectedMinute =  [customPickerView selectedRowInComponent:1];

NSDate *today = [NSDate date];
NSDateFormatter *weekdayFormatter = [[[NSDateFormatter alloc] init]autorelease];
NSDateFormatter *hmformatter = [[[NSDateFormatter alloc] init]autorelease];
[hmformatter setDateFormat: @"hh mm"];
[weekdayFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
[weekdayFormatter setDateFormat: @"EE"];
// NSString *formattedDate = [formatter stringFromDate: today];


NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]autorelease];
NSDateComponents *dateComponentsToday = [gregorian components:(NSHourCalendarUnit  | NSMinuteCalendarUnit | NSDayCalendarUnit) fromDate:today];


NSInteger currentHour = [dateComponentsToday hour];
NSInteger currentMinute = [dateComponentsToday minute];

NSString *weekday; 



if ((selectedHour > currentHour) | ((selectedHour == currentHour) & (selectedMinute > currentMinute))) {
    //so we are still in today
    weekday = [weekdayFormatter stringFromDate: today];
    weekday =  NSLocalizedString(@"today", @"today");
} else {
    //the timer should start tomorrow
    NSTimeInterval secondsPerDay = 24 * 60 * 60;
    NSDate *tomorrow = [today dateByAddingTimeInterval:secondsPerDay];
    weekday = [weekdayFormatter stringFromDate: tomorrow];
    weekday =  NSLocalizedString(@"tomorrow", @"tomorrow");
}
person user387184    schedule 10.09.2011

timeIntervalSinceNow сравнивает NSDate с Now. если NSDate после Now, возвращаемое значение положительное, если дата раньше, чем Now, результат отрицательный.

double timeLeft = [TaskCompltTime timeIntervalSinceNow];

 if(  timeLeft > 0.0 )
 // still time left 

 else
     //time is up
person ophychius    schedule 10.09.2011

Да, для ваших целей, вероятно, лучше всего работать с временными интервалами. NSTimeInterval в Objective-C — это псевдоним для double, и он представляет значение времени в секундах (и, конечно, в долях, по крайней мере, с разрешением в миллисекундах).

Для этого в NSDate есть несколько методов: +timeIntervalSinceReferenceDate, который возвращает количество секунд с 1 января 2001 г., -timeIntervalSinceReferenceDate, который возвращает разницу во времени между предоставленным объектом NSDate, и 1 января 2001 г., -timeIntervalSinceDate:, который возвращает разницу в секунды между двумя объектами NSDate и -timeIntervalSinceNow, который возвращает разницу между текущим временем и объектом NSDate.

Во многих случаях наиболее удобно вместо этого хранить значение NSDate как NSTimeInterval (например, timeIntervalSinceReferenceDate). Таким образом, его не нужно хранить, утилизировать и т. д.

person Hot Licks    schedule 10.09.2011