Ios 算法:解析时间

Ios 算法:解析时间,ios,algorithm,logic,Ios,Algorithm,Logic,我有一个需要在固定时间内解决的问题(关键在4小时内,重要在10小时内,正常在24小时内)。如果中间有非工作时间或假期,查询时间可以增加。非工作时间可以是一整天,也可以是一天中的某个小时 例如:周一上午8:02提出的关键问题应在下午1:00前得到解决 //Working hours of week Mon 09:00am - 01:00pm Tue Holiday Wed 09:00am - 05:00pm(non working between 01:00pm - 02:00pm) Th

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

例如:周一上午8:02提出的关键问题应在下午1: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)
输入为查询类型和查询日志时间。需要的输出是解析时间

我的方法:

将所有工时添加到查询中,如同所有工时都在工作一样。因此,如果关键enq的记录时间为上午08:02,则添加4小时,即下午12:02作为恢复时间

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

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

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;
NSDate*enqexpntiation=nil;
int HOURSENDETOCOVERENQ=0;
开关(enqType){
案件优先权:
Hours needToCoverenq=低恢复小时数;
EnqExption=[NSDate dateWithTimeInterval:lowResHours*Hours sinceDate:capturedTime];
打破
案例重要性优先:
所需的小时数=中等小时数;
EnqExpation=[NSDate dateWithTimeInterval:mediumResHours*Hours sinceDate:capturedTime];
打破
关键案例优先级:
Hours needtocoverenq=高恢复小时数;
EnqExption=[NSDate dateWithTimeInterval:highResHours*Hours sinceDate:capturedTime];
打破
}
int aggregatedHrs=0;
while(true){
capturedTime=[NSDate DATE WITH TIME INTERVAL:1*HOURE sinceDate:capturedTime];
NSDateFormatter*dayFormat=[[NSDateFormatter alloc]init];
[dayFormat setTimeZone:[NSTimeZone TimeZoneWithabRevision:@“GMT”];
[dayFormat setDateFormat:@“EEEE”];
NSString*capturedDay=[dayFormat stringFromDate:capturedTime];
[dayFormat setDateFormat:@“dd/MM/yyyy”];
NSString*todayDate=[dayFormat stringFromDate:capturedTime];
if([sobject:capturedDay]){
enqExpiration=[NSDate DateWithTime Interval:1*小时,自日期:enqExpiration];
持续
}否则,如果([假日包含对象:todayDate]){
enqExpiration=[NSDate DateWithTime Interval:1*小时,自日期:enqExpiration];
持续
}否则{
NSString*打开时间,*关闭时间;

对于(int i=0;i)(我认为
的规范需要在固定时间内解决
很少(而且语法上不确定)——“服务协议”详细说明了条款,您的问题就不会出现。(描述中的“日志时间”与代码中的
capturedTime
相同吗?)当日志时间不起作用时,
不会给我正确的结果
-那么将
capturedTime
设置为下一个工作小时(开始)如何?(我建议重新访问(并可能在最后链接,特别是“编写完美问题”和“如何以智能方式提问”))谢谢你,现在如果你能想出解决办法那就太好了!