2011-01-05 11 views
1

「は31日 - 2010午前9時〜午後1時」NSDateでの作業とObjective Cの日付と比較

例えば上記NSStringのを取り、Iは​​、例えば、2 NSDatesに変換する必要があります 2010年12月31日午前9時および2010年12月31日1:00 PM

次に、現在の日付と比較して、現在の日付が指定された日付内にあるかどうかを確認します。

だから2010年12月31日午前10時は午前中になります。

私は疑問に思っています。ベストプラクティス/トリックは、これをエレガントに行うためのObjective Cとは何ですか?

+0

私はunixtimeに変換したいとの比較のために(これはに組み込まれていますobj-c)しかし、それは私の好みです! –

+0

NSDateのcompare:メソッドを使用するコードを読むときに、私はいつも思ったより長く考えなければならないので、compare:underneathを使うlessThan:、lessThanOrEqual :,などを実装したNSDateのカテゴリを書きました。私は、コーディング時に読むのがはるかに簡単だと分かります。 – nall

+0

コードを共有してください! :P –

答えて

0

私はそうのようにそれをやってしまった:

NSString *temp = [[dateString allValues] objectAtIndex:0]; 

    NSLog(@"temp: %@", temp); 


    NSArray *tokens = [temp componentsSeparatedByString: @" "]; 


    NSArray *tokenOneDelimited = [[tokens objectAtIndex:0] componentsSeparatedByString: @"-"]; 


    NSString *dateStr1 = [NSString stringWithFormat: @"%@-%@-%@ %@", [tokenOneDelimited objectAtIndex:2], 
                     [tokenOneDelimited objectAtIndex:1], 
                     [tokenOneDelimited objectAtIndex:0], 
                     [tokens    objectAtIndex:1]]; 

    NSString *dateStr2 = [NSString stringWithFormat: @"%@-%@-%@ %@", [tokenOneDelimited objectAtIndex:2], 
          [tokenOneDelimited objectAtIndex:1], 
          [tokenOneDelimited objectAtIndex:0], 
          [tokens    objectAtIndex:3]]; 

    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 

    [dateFormatter setDateFormat:@"yyyy-MMM-dd hh:mma"]; 

    NSDate *myDate1 = [dateFormatter dateFromString: dateStr1]; 

    NSDate *myDate2 = [dateFormatter dateFromString: dateStr2]; 

    NSDate *currentDate = [NSDate date]; 

    NSComparisonResult comparison = [currentDate compare: myDate1]; 

    NSComparisonResult comparison2 = [currentDate compare: myDate2]; 


    if ( 
     comparison  == NSOrderedDescending && 
     comparison2  == NSOrderedAscending 
     ) 
    { 
     NSLog(@"is On now"); 
関連する問題