0

私がやろうとしているのは、記号よりも大きいよりも小さい日付を使用して if ステートメントを作成することです。何らかの理由で、大なり記号のみが機能します。これが私のコードです:

NSDate *currDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"HHmm"];
NSString *dateString = [dateFormatter stringFromDate:currDate];
NSLog(@"%@",dateString);

if (dateString < @"0810" && dateString > @"0800") {
    NSLog(@"Homeroom");
}
else {
    NSLog(@"no");
}

時刻が 8:03 の場合、このコードの出力は次のようになります。

2013-04-08 08:03:47.956 Schedule2.0[13200:c07] 0803
2013-04-08 08:03:47.957 Schedule2.0[13200:c07] no

もし私がそうするなら、それは次のようにサインするだけです:

if (dateString > @"0800") {
    NSLog(@"Homeroom"); 
}
else {
    NSLog(@"no");
}

出力は次のようになります。

2013-04-08 08:03:29.748 Schedule2.0[14994:c07] 0803
2013-04-08 08:03:29.749 Schedule2.0[14994:c07] Homeroom
4

5 に答える 5

3

時刻が 8:10 の NSDate オブジェクトと 8:00 の NSDate オブジェクトを作成します。これで、指定された日付をこれらの両方の日付と比較できます

if(([date0800 compare:date] == NSOrderingAscending) && [date0810 compare:date] == NSOrderingDescending) )
{
    // date is between the other
}

これを行うことができる境界の日付を作成するには

NSDate *date = [NSDate date]; // now
NSDateComponents *components = [[NSCalendar currentCalendar] components:( NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit ) fromDate:date];
components.hour = 8;
components.minute = 0;

NSDate *date0800 = [[NSCalendar currentCalendar] dateFromComponents: components];
components.minute = 10;
NSDate *date0810 = [[NSCalendar currentCalendar] dateFromComponents: components];

<やのような演算子の使用を主張する場合>は、日付オブジェクトの timeinterval を使用できます。

if(([date0800 timeIntervalSince1970] < [date timeIntervalSince1970]) && ([date0810 timeIntervalSince1970] > [date timeIntervalSince1970]))
{
    // date lays between the other two
}

==ただし、丸め誤差によりエラーが発生する可能性があるため、チェックには注意してください。

于 2013-04-08T22:55:40.813 に答える
1

ここでは、文字列オブジェクトを と で比較<>ていますが、期待どおりの結果が得られません。NSDateComponentsこれらを比較するために時間と分を取得するために使用できます。

NSDate *today = [NSDate date];

NSCalendar *gregorian = [[NSCalendar alloc]

                     initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *components =

                [gregorian components:(NSHourCalendarUnit | NSMinuteCalendarUnit ) fromDate:today];

NSInteger hour = [weekdayComponents hour];

NSInteger minutes = [weekdayComponents minute];

BOOL homeroom = (hour == 8) && (minute < 10);

または、NSDateFormater と関数を使用して、8:10 と 8:00 の特定の NSDate を作成できますcompare:

于 2013-04-08T22:39:15.147 に答える
0

NSStringオブジェクトはオブジェクトであり、オブジェクトを C 比較演算子 (==、>、< など) で比較すると、値ではなくアドレスが比較されます。次のように使用する必要がありますcompare

if ([dateString compare:@"0810"] == NSOrderedAscending &&
    [dateString compare:@"0800"] == NSOrderedDescending) { ...

NSDateただし、日付と時刻を比較する場合は、ほとんどの場合、オブジェクトに変換することをお勧めします。

于 2013-04-08T22:39:06.897 に答える
0

> または < を使用して文字列オブジェクトを比較することはできません。これは実際にポインターを比較するため、> '動作する' と < '動作しない' の理由については説明しません。

この種の日付比較には、NSDateComponents NSDateComponents Referenceを使用します

于 2013-04-08T22:39:22.073 に答える