算法:解决时间

时间:2015-10-10 08:54:50

标签: ios algorithm logic

我有一个需要在固定时间内解决的问题(4小时严重,10小时重要,24小时正常)。如果在中间或假日之间有非工作时间,则可以增加查询时间。非工作可以是特定日期的全天或一小时。

例如:星期一上午08:02提出的一项重要调查应在下午01:00之前解决。

//Working hours of week 
Mon  09:00am - 01:00pm
Tue  Holiday
Wed  09:00am - 05:00pm(non working between 01:00pm - 02:00pm)
Thu  11:00am - 03:00pm(non working between 01:00pm - 02:00pm)
Fri  09:00am - 05:00pm(non working between 01:00pm - 02:00pm)

输入是查询类型和查询日志时间。需要的输出是解决时间。

我的方法:

将所有res小时数添加到查询中,就好像所有小时都在工作一样。所以,如果日志时间是08:02 am,关键enq加4小时,即12:02 pm作为res时间。

输入while(true)循环,我检查下一个hr是否是工作时间。如果是,则跳过该小时,否则将其添加到res时间并继续。

但是当日志时间不起作用时,这种方法并没有给我正确的结果。

NSDate *enqExpiration = nil;
    int hoursNeededToCoverEnq = 0;
    switch (enqType) {
        case normalPriority:
            hoursNeededToCoverEnq = lowResHours;
            enqExpiration = [NSDate dateWithTimeInterval:lowResHours*hour sinceDate:capturedTime];
            break;
        case importantPriority:
            hoursNeededToCoverEnq = mediumResHours;
            enqExpiration = [NSDate dateWithTimeInterval:mediumResHours*hour sinceDate:capturedTime];
            break;
        case criticalPriority:
            hoursNeededToCoverEnq = highResHours;
            enqExpiration = [NSDate dateWithTimeInterval:highResHours*hour sinceDate:capturedTime];
            break;
    }

    int aggregatedHrs = 0;

    while(true){
        capturedTime = [NSDate dateWithTimeInterval:1*hour sinceDate:capturedTime];

        NSDateFormatter *dayFormat = [[NSDateFormatter alloc] init];
        [dayFormat setTimeZone: [NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
        [dayFormat setDateFormat:@"EEEE"];

        NSString* capturedDay = [dayFormat stringFromDate:capturedTime];
        [dayFormat setDateFormat:@"dd/MM/yyyy"];

        NSString* todayDate = [dayFormat stringFromDate:capturedTime];

        if([weekends containsObject:capturedDay]){
            enqExpiration = [NSDate dateWithTimeInterval:1*hour sinceDate:enqExpiration];
            continue;

        }else if([holidays containsObject:todayDate]){
            enqExpiration = [NSDate dateWithTimeInterval:1*hour sinceDate:enqExpiration];
            continue;

        }else{
            NSString *openTime, *closeTime;
            for(int i=0; i<weekdaysTime.count; i++){
                if([[((NSMutableDictionary*)[weekdaysTime objectAtIndex:i]) valueForKey:@"workingDay"] isEqualToString:capturedDay]){
                    openTime = [((NSMutableDictionary*)[weekdaysTime objectAtIndex:i]) valueForKey:@"openingTime"];
                    closeTime = [((NSMutableDictionary*)[weekdaysTime objectAtIndex:i]) valueForKey:@"closingTime"];
                    break;
                }
            }
            NSDate *openTimeToday = nil, *closeTimeToday = nil;
            [dayFormat setDateFormat:@"dd/MM/yyyy hh:mmaa"];
            openTimeToday = [dayFormat dateFromString:[[todayDate stringByAppendingString:@" "] stringByAppendingString:openTime]];
            closeTimeToday = [dayFormat dateFromString:[[todayDate stringByAppendingString:@" "] stringByAppendingString:closeTime]];
            if([capturedTime compare:openTimeToday]==NSOrderedAscending || [capturedTime compare:closeTimeToday]==NSOrderedDescending ){
                enqExpiration = [NSDate dateWithTimeInterval:1*hour sinceDate:enqExpiration];
                continue;
            }
        }
        aggregatedHrs ++;
        if( aggregatedHrs == hoursNeededToCoverEnq )
            break;
    }
return enqExpiration;

0 个答案:

没有答案