使用当前时间从数组计算最近的时间 [英] Calculate Nearest time from array with Current Time

查看:36
本文介绍了使用当前时间从数组计算最近的时间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在时间数组中有 6 个对象

I have got 6 objects in array of Time

NSMutableArray *time=[[NSMutableArray alloc]initwithObjects:12:30, 14:40, 16:50, 20:30, 21:49, 23:12,nil];

Current time = 17:12;

我应该如何从 time_array 计算 8:12 的最近时间?

How should I calculate the nearest time with 8:12 from time_array ?

conclusion must be 20:30 

我实现了许多公式,例如在减去时间后选择可用的最小值,但其中存在错误并且不是完美的解决方案.任何人都可以分享在目标 C 中计算完美最近时间的想法吗?

I implemented many formula's like picking up the least value available after substracting the times but there is bugs in it and its not a perfect solution. Can any one share there idea's to calculate the perfect nearest time in Objective C?

我已经试过了

 //// Calculating to fetch nearest time
    NSDateFormatter *current_time_format = [[NSDateFormatter alloc] init];
    [current_time_format setTimeZone:zone];
    [current_time_format setDateFormat:@"HHmm"];
    NSString *current_date_string=[current_time_format stringFromDate:[NSDate date]];
    int current_time_int=[current_date_string intValue];
    int nearest_time=10000;
    int  time_calculation=0;
    if ([calculated_time_array count]>=6) {
        [calculated_time_array removeAllObjects];
    }


    for (int i=0; i<[current_timings_array count]; i++) {
            NSString *prayer_timings=[current_timings_array objectAtIndex:i];
            prayer_timings=[prayer_timings stringByReplacingOccurrencesOfString:@":" withString:@""];
            time_calculation=[prayer_timings intValue]-current_time_int;
        NSLog(@"%d-%d=%d",[prayer_timings intValue],current_time_int,time_calculation);
        NSString *length_value=[NSString stringWithFormat:@"%d",current_time_int];
        NSLog(@"lenght_value= %d",[length_value length]);
        [calculated_time_array addObject:[NSString stringWithFormat:@"%d",time_calculation]];


         if (time_calculation<nearest_time && time_calculation>0) {
            nearest_time=time_calculation;

    }

    NSString *time_string=[NSString stringWithFormat:@"%d",nearest_time];
    int index=[calculated_time_array indexOfObject:time_string];
    header_bg_image.image=[UIImage imageNamed:[NSString stringWithFormat:@"top%d_bg.png",index+1]];

    NSMutableString *mu = [NSMutableString stringWithString:[NSString stringWithFormat:@"%d",nearest_time]];
    if ([time_string length]==3) {
        [mu insertString:@"0" atIndex:0];
        [mu insertString:@":" atIndex:2];
    }

    NSString  *time=[NSString stringWithFormat:@"%@",mu];

    time=[current_timings_array objectAtIndex:index];
    time=[time stringByReplacingOccurrencesOfString:@":" withString:@"."];
    NSDate *date1;
    NSDate *date2;
    {
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"hh.mm"];
        date1 = [formatter dateFromString:time];
        date2 = [formatter dateFromString:[formatter stringFromDate:[NSDate date]]];

    }



// Here I'm calculating the time difference
        NSTimeInterval interval = [date1 timeIntervalSinceDate: date2];//[date1 timeIntervalSince1970] - [date2 timeIntervalSince1970];
        int hour = interval / 3600;
        int minute = (int)interval % 3600 / 60;

    //    NSLog(@"%@ %dh %dm", interval<0?@"-":@"+", ABS(hour), ABS(minute));
        label_time_left.text=[NSString stringWithFormat:@"Time left %dh %dm",ABS(hour), ABS(minute)];

推荐答案

我已经用自己的方法解决了,这里放上来,希望对别人有帮助

I have solved it with my own method, here it is as it may help someone else

    NSDate *date = [NSDate date];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
   [formatter setTimeZone:zone];
   [formatter setDateFormat:@"HHmm"];
    current_time=[formatter stringFromDate:date];

    int current_time_int=[current_time intValue];
     nearest_time=2400;
    for (int i=0; i<[current_timings_array count]; i++) {
        NSString *prayer_timings=[current_timings_array objectAtIndex:i];
        prayer_timings=[prayer_timings stringByReplacingOccurrencesOfString:@":" withString:@""];

      int  calculated_time=[prayer_timings intValue]-current_time_int;
        NSLog(@"Nearest Timings %d-%d=%d",[prayer_timings intValue],current_time_int ,calculated_time);
        NSString *last_object_time=[current_timings_array.lastObject stringByReplacingOccurrencesOfString:@":" withString:@""];
        if (current_time_int>[last_object_time intValue]) {
            NSLog(@"It is greated value %d",[last_object_time intValue]);
            if (calculated_time<nearest_time ) {
                nearest_time=calculated_time;
                header_bg_image.image=[UIImage imageNamed:[NSString stringWithFormat:@"top%d_bg.png",   i+1]];

            }
        }
        else{
        if (calculated_time<nearest_time && calculated_time>0) {
                nearest_time=calculated_time;
                header_bg_image.image=[UIImage imageNamed:[NSString stringWithFormat:@"top%d_bg.png",   i+1]];

        }
        }


    }

这篇关于使用当前时间从数组计算最近的时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆