0

オンコール技術者の名前を含むアプリケーションを構築しようとしています。次の形式の 4 つのオブジェクトを含む単純な NSArray があります。

20130910;0800;John Doe
20130910;1400;Sally Smith
20130910;2000;Jim Jones
20130911;0800;Jane Johnson

上記の形式は、yyyyMMdd の日付、2400 時間制の時間、および技術者の名前です。

上記と同じ形式でローカル デバイスの時刻と日付を持つ *timeString と *dateString の 2 つの文字列があります。

技術者の名前を新しい文字列に割り当てるために、最新の過去の期日/時刻を探して配列を検索したいと思います。

上記の例を使用すると、9 月 10 日の 1600 (午後 4 時) である場合、私はサリー スミスが 14 時 (午後 2 時) にオンコールを開始したため、戻ってくるように求めています。

4

2 に答える 2

0

技術者のリストのサイズによっては、ループが機能します。以下のコードは、リストを繰り返し処理し、各項目を 3 つの部分 (日付、時刻、技術者) に分割し、現在からの間隔を計算し、最新の/アクティブなエージェントを特定します (間隔は最大のマイナスでなければなりません)。

何か意味のあるものを得るために、配列の日付を変更しました。

NSArray *agents = [NSArray arrayWithObjects:
                        @"20130920;0800;John Doe",
                        @"20130920;1400;Sally Smith",
                        @"20130920;2000;Jim Jones",
                        @"20130921;0800;Jane Johnson",nil];

// Setup date formatter
NSDateFormatter* onCallFormatter = [[[NSDateFormatter alloc] init] autorelease];
[onCallFormatter setDateFormat:@"yyyyMMddHHmm"];
[onCallFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];

NSTimeInterval mostRecent = -9999999999999;
NSInteger agentIndex;
int i;

for ( i=0; i < [agents count]; i++ ) {
    // Split string into elements
    NSArray *elements = [[agents objectAtIndex:i] componentsSeparatedByString:@";"];

    // Convert date/time into NSDate
    NSDate *onCallDateTime = [onCallFormatter dateFromString:[NSString stringWithFormat:@"%@%@", elements[0], elements[1]]];

    // Calculate the time interval against current date/time
    NSTimeInterval onCallInterval = [onCallDateTime timeIntervalSinceNow];

    // The agent on call would be the one with the largest negative interval
    // onCallInterval should be < 0 (postive would be in the future)
    if ( mostRecent < onCallInterval && onCallInterval < 0) {
        mostRecent = onCallInterval;
        agentIndex = i;
    }
    NSLog( @"%@ on call since %@ - %@ - %f hrs ", elements[2], elements[0], elements[1], onCallInterval/(60*60) );
}

NSLog( @"On call = %@", [agents objectAtIndex:agentIndex] );
于 2013-09-21T02:25:58.050 に答える