2011-09-10 24 views
0

私のアプリケーションでは、特定の時間内に特定のタスクを完了する必要があります。最初に、時間を計算して秒単位でタスクを完了し、その時間を現在のように追加します。時間を現在の日付と時間と比較するには?

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"); 
} 

のような時間を比較するが、私は、現在の時間が続いたり、私がこのことを知ることができる方法を、現在の時刻より大きい小さい時間が残されているかを知りたいかnot.Is?

答えて

0

私はピッカーから時間を得て、今日か明日をチェックする例があります。あなたは、あなたの目的のために、それは時間間隔で動作するようにおそらく最高だ、うん...

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"); 
} 
1

timeIntervalSinceNowはNSDateをNowと比較します。 NSDateが後である場合戻り値は、日付が前の日付よりも早い場合には現在の値になります。

double timeLeft = [TaskCompltTime timeIntervalSinceNow]; 

if( timeLeft > 0.0) 
// still time left 

else 
    //time is up 
0

コードだけを取り、あなたの方法でそれを使用することができるはずです。 Objective-CのNSTimeIntervalは、doubleのエイリアスであり、秒単位の時間値を表します(もちろん、少なくともミリ秒の分解能までの端数も含みます)。

このためNSDateにはいくつかの方法があります - +timeIntervalSinceReferenceDate、供給NSDateオブジェクトと2001年1月1日、-timeIntervalSinceDate:間の時間差を返します2001年1月1日、-timeIntervalSinceReferenceDate、以降の秒数を返し、これは、 2つのNSDateオブジェクト間の秒数の差を返します。-timeIntervalSinceNowは、現在の時刻とNSDateオブジェクトの差を返します。

NSTimeIntervalとしてNSDate値を代わりに保存するのが最も便利です(たとえば、timeIntervalSinceReferenceDate)。このようにして、保持したり廃棄したりする必要はありません。

関連する問題