0

コンセントの異なる時間をiPadの現在の時間と比較したいので、私がしたことはこれでした

if(CT!=nil && startTime!=nil &&endTime!=nil)
{

    /* If current time is greater than begin time but less than end time then he can give feedack
     */
    if (([CT compare:startTime]== NSOrderedDescending) && ([CT compare:endTime]== NSOrderedAscending) ) {

        return YES;
    }

    else if (([CT compare:startTime]== NSOrderedSame) || ([CT compare:endTime]== NSOrderedSame))
    {
         return YES;
    }
    else if (([CT compare:startTime]== NSOrderedDescending) && ([CT compare:endTime]== NSOrderedDescending))
    {
        return NO; // out of outlet timings
    }

これは今までうまく機能しているようですが、アウトレット時間を変更すると

開始時間 = 午後 18 時 30 分 終了時間 = 午前 2 時

その場合、上記のコードが失敗し、iPad が午前 1:00 に時計を合わせると、最初の if 条件が失敗するため、このコードを以下に追加しました

 if (([CT compare:startTime]== NSOrderedAscending) && ([CT compare:endTime]== NSOrderedAscending))
    {


    }

開発者として、デバイスのクロックが午前 1:00 の場合は失敗しないと確信していますが、誰かがコンセントのタイミングを

開始時間 = 午前 9:00 終了時間 = 午前 11:00

現在のデバイス時間 = 8:00 AM

上記の場合、2番目のコードは失敗します。

私が欲しいのは、2番目のif条件でできることのような提案です

CT を作成するコードは次のとおりです。

 NSDate *sysDate = [NSDate date];
NSDateFormatter *df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"HH:mm:ss"];
NSString *timeString = [df stringFromDate:sysDate];
NSDate *CT = [df dateFromString:timeString];

startTime と endTime は、plist に格納されている日付オブジェクトです。

4

3 に答える 3

1

日付の代わりに数値があるかのように条件を書き直して、実際の動作を確認します ( 「より大きい」、「より小さい」になるNSOrderedDescending) :>NSOrderedAscending<

if (ctNumber > startNumber && ctNumber < endNumber)
{ ... }
else if (ctNumber == startNumber || ctNumber == endNumber)
{ ... }
else if (ctNumber > startNumber && ctNumber > endNumber)
{ ... }

このようにして、最後の条件があなたが意図したものとはまったく異なり、後で試した他の条件がまだ正しくないことが明らかであることを願っています. 正しいものは(ctNumber < startNumber || ctNumber > endNumber)、スタンドアロンelseで行うこととまったく同じであるため、ドロップするだけです。

if (ctNumber > startNumber && ctNumber < endNumber)
{ ... }
else if (ctNumber == startNumber || ctNumber == endNumber)
{ ... }
else 
{ /* otherwise ; everything else ; in all other cases */ ... }

しかし、このようなさらなる混乱を避けるために、@ ILYA2606 のアドバイスに従い、時間間隔 (数値) を比較する必要があります。また、中間条件を使用<=してドロップすることもできます。>=

NSTimeInterval ctNumber = [CT timeIntervalSince1970];
NSTimeInterval startNumber = [startDate timeIntervalSince1970];
NSTimeInterval endNumber = [endDate timeIntervalSince1970];

BOOL ctLiesInsideInterval = (ctNumber >= startNumber && ctNumber <= endNumber);
return ctLiesInsideInterval;

CTそして最後に、作成する日付フォーマッタ コードはナンセンスであり、単に現在の時刻を使用するのと同等であることを指摘しなければなりません。

NSDate* CT = [NSDate date];
于 2013-09-10T10:01:19.783 に答える
0

これを試してみてください..

 NSDate *currentDate=[NSDate date];  

 NSTimeInterval daysInSeconds = 60*60; 
 NSDate *starttime= [currentDate dateByAddingTimeInterval:daysInSeconds];

 daysInSeconds = 2*60*60;
 NSDate *endtime= [currentDate dateByAddingTimeInterval:daysInSeconds];

 if( [starttime compare:currentDate]==NSOrderedAscending ){
     //Ascending (CT < startTime)
 }

 if( [starttime compare:currentDate]==NSOrderedDescending ){
     //Descending (CT > startTime)
 }

 if( [endtime compare:currentDate]==NSOrderedAscending ){
     //Ascending (CT < endtime)
 }

 if( [endtime compare:currentDate]==NSOrderedDescending ){
     //Descending (CT > endtime)
 }
于 2013-09-10T09:17:58.173 に答える