在我的应用程序中,我必须在给定的时间内完成一项特定的任务。首先,我计算完成任务的时间(以秒为单位),然后将该时间添加到这样的当前时间。
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");
}
但我想知道时间是否已经离开。当前时间是当前时间还是大于当前时间我怎么知道这个?
答案 0 :(得分:1)
timeIntervalSinceNow将NSDate与Now进行比较。如果NSDate在After之后,则返回值是可能的,如果日期早于Now,则结果为负。
double timeLeft = [TaskCompltTime timeIntervalSinceNow];
if( timeLeft > 0.0 )
// still time left
else
//time is up
答案 1 :(得分: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");
}
答案 2 :(得分:0)
是的,出于您的目的,最好按时间间隔工作。 Objective-C中的NSTimeInterval是double
的别名,它表示以秒为单位的时间值(当然还有分数,至少达到毫秒分辨率)。
NSDate上有几种方法 - +timeIntervalSinceReferenceDate
,它返回自2001年1月1日以来的秒数-timeIntervalSinceReferenceDate
,它返回提供的NSDate对象和Jan之间的时间差。 1,2001,-timeIntervalSinceDate:
,它返回两个NSDate对象之间的秒差,以及-timeIntervalSinceNow
,它返回当前时间和NSDate对象之间的差异。
很多时候,最方便的是将NSDate值存储为NSTimeInterval(例如,timeIntervalSinceReferenceDate)。这样就不必保留和处理等等。