两个nsdate之间的时间差



我的目标是制作一个倒计时标签。因此,例如,我想显示时间19:00:00和当前时间之间的差异。我在下面为它写了一个代码。此外,我使用sqlite存储了一个时间;19:00:00.

    //start time
    NSString *starttime = mission.starttime;
    NSDate *starttime_convert;
    NSDateFormatter *formatttter = [[NSDateFormatter alloc]init];
    [formatttter setDateFormat:@"HH:mm:ss"];
    starttime_convert = [formatttter dateFromString:starttime];
    //current time
    NSDate *nowtime = [NSDate dateWithTimeIntervalSinceNow:[[NSTimeZone systemTimeZone] secondsFromGMT]];
    //NSLog(@"Current Time %@", nowtime);
    float countdown = [nowtime timeIntervalSinceDate:starttime_convert];
    int hh = (countdown/3600);
    NSLog(@"%d",hh);
    int mm = ((countdown-(hh*3600))/60);
    int ss = countdown-(hh*3600+mm*60);
    NSLog(@"%02d:%02d:%02d",hh,mm,ss);

然而,将显示的结果是,122238:43:32。由于,当前时间为16:44:32,应显示02:15:68。但事实并非如此。

有人能帮我修一下吗?

您应该在开始时间中指定当前日期,而不是仅指定@"19:00:00"

要做到这一点,您可以使用以下代码:

NSString *starttime = @"19:00:00";
NSArray *times = [starttime componentsSeparatedByString:@":"];
int hour = [times[0] integerValue];
int minute = [times[1] integerValue];
int second = [times[2] integerValue];
NSDate *date = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
NSDateComponents *components = [gregorian components: NSUIntegerMax fromDate: date];
[components setHour: hour];
[components setMinute: minute];
[components setSecond: second];
NSDate *starttime_convert = [gregorian dateFromComponents: components];
//current time
//NSDate *nowtime = [NSDate dateWithTimeIntervalSinceNow:[[NSTimeZone systemTimeZone] secondsFromGMT]];
float countdown = -[date timeIntervalSinceDate:starttime_convert];//pay attention here.
int hh = (countdown/3600);
NSLog(@"%d",hh);
int mm = ((countdown-(hh*3600))/60);
int ss = countdown-(hh*3600+mm*60);
NSLog(@"%02d:%02d:%02d",hh,mm,ss);
self.startTime = [[NSDate date] timeIntervalSince1970];
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(startTimer) userInfo:nil repeats:YES];

- (void)startTimer {
    double difference = [[NSDate date] timeIntervalSince1970] - self.startTime;
    int hh = 0, mm = 0, ss = 0;
    if(difference < 60) {
        ss = difference;
    } else if(difference/60 < 60) {
        mm = difference/60;
        ss = difference%60;
    } else if(difference/3600 < 24) {
        mm = difference/60;
        hh = mm/60;
        mm = mm%60;
        ss = difference%3600;
    }
    NSLog(@"%2d:%2d:%2d", hh, mm, ss);
}

我已经检查了几分钟,工作正常。我想它也要工作好几个小时。

最新更新