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

但我想知道是否还有时间。当前时间是小于还是大于当前时间我怎么知道?

4

3 回答 3

1

timeIntervalSinceNow 将 NSDate 与 Now 进行比较。如果 NSDate 在 Now 之后,则返回值为正,如果日期早于 Now,则结果为负。

double timeLeft = [TaskCompltTime timeIntervalSinceNow];

 if(  timeLeft > 0.0 )
 // still time left 

 else
     //time is up
于 2011-09-10T07:05:32.743 回答
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");
}
于 2011-09-10T07:08:57.573 回答
0

是的,为了您的目的,最好按时间间隔工作。Objective-C 中的 NSTimeInterval 是 的别名double,它表示以秒为单位的时间值(当然,还有分数,至少小到毫秒)。

NSDate 上有几种方法可以实现这一点 -- +timeIntervalSinceReferenceDate,它返回自 2001 年 1 月 1 日以来的秒数-timeIntervalSinceReferenceDate,它返回提供的 NSDate 对象与 2001 年 1 月 1 日之间的时间-timeIntervalSinceDate:差,它返回以秒为单位的时间差。两个 NSDate 对象和-timeIntervalSinceNow,它返回当前时间和 NSDate 对象之间的差。

很多时候,将 NSDate 值存储为 NSTimeInterval 是最方便的(例如,timeIntervalSinceReferenceDate)。这样它就不必保留和处置等。

于 2011-09-10T12:14:25.223 回答