比较目标c中的时间

用户名

我想将不同时间的网点时间与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 PM结束时间= 2:00 AM

然后在这种情况下,上面的代码失败,当ipad在1:00 AM计时时,第一个if条件失败,所以我在下面添加了此代码

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


    }

现在,作为一名开发人员,我确定如果设备在1:00 AM计时,那么它将不会失败,但是如果有人将插座定时更新为

开始时间= 9:00 AM结束时间= 11:00 AM

和当前设备时间= 8:00 AM

那么在上述情况下,我的第二个代码将失败。

我想要的是一些建议,例如在第二种情况下我可以做什么

创建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中的日期对象。

仓鼠基因

重写条件,就好象有数字而不是日期,并查看它们的实际作用(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];

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章