简体   繁体   English

如何计算两个NSDate?

[英]how to compre two NSDates?

I'm using DSLCalenderview for my iOS project. 我将DSLCalenderview用于我的iOS项目。 I need to fill a color in DSLCalenderview 's dates. 我需要在DSLCalenderview的日期中填充颜色。 I store specific dates into an NSMutablearray and compare it with a date object. 我将特定的日期存储到NSMutablearray ,并将其与日期对象进行比较。 The DSLCalenderview code is: DSLCalenderview代码为:

- (void)drawBackground {
    NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init];
    [dateformatter setTimeZone:[NSTimeZone systemTimeZone]];
    //[dateformatter setLocale:[NSLocale currentLocale]];
    [dateformatter setDateFormat:@"MMMM yyyy dd HH:mm:ss Z"];
    if (self.selectionState == DSLCalendarDayViewNotSelected) {
        user=[[NSUserDefaults alloc] init];

        NSUInteger flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
        NSCalendar *calendar = [NSCalendar currentCalendar];

        NSDateComponents *components = [calendar components:flags fromDate:[self.day date]];

        NSDateComponents *componentsOfToday = [calendar components:flags fromDate:[NSDate date]];

        date = [calendar dateFromComponents:components];

        dateToday = [calendar dateFromComponents:componentsOfToday];

        if (self.isInCurrentMonth) {

            /*
            for (int i=0;i<datearray.count;i++) {

                dateSelected=[dateformatter dateFromString:[datearray objectAtIndex:i]];
            }


            if ([date isEqualToDate:dateSelected]) {

                NSLog(@"date selected......... %@",dateSelected);



                }
            */

        //    NSLog(@">>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
            if ([date isEqualToDate:dateToday]) {
             //   NSLog(@"inside today......... %@",dateToday);
                [[UIColor redColor] setFill];
                //from now current day is colored
            }
            else {

                //NSLog(@"date selected %@",dateSelected);
                [[UIColor colorWithWhite:245.0 / 255.0 alpha:1.0] setFill];
            }

        }
        else {

           // NSLog(@"++++++++++++++++++++++++++++++");
            if ([date isEqualToDate:dateToday]) {

                [[UIColor greenColor] setFill];

            }
            else {

                [[UIColor colorWithWhite:225.0 / 255.0 alpha:1.0] setFill];
            }

            for (int i=0;i<datearray.count;i++) {

                dateSelected=[dateformatter dateFromString:[datearray objectAtIndex:i]];
                NSLog(@"date %@  dateselected %@",date,dateSelected);
                NSDateComponents *selected=[calendar components:flags fromDate:dateSelected];
                dateSelected=[calendar dateFromComponents:selected];
                NSLog(@"date %@ dateselected %@",date,dateSelected);
                if ([date isEqualToDate:dateSelected]) {
                    NSLog(@"inside loop");
                    [[UIColor grayColor]setFill];
                }
            }


        }
        UIRectFill(self.bounds);
    }
    else {
        switch (self.selectionState) {

            case DSLCalendarDayViewNotSelected:

                NSLog(@"DSLCalendarDayViewNotSelected>>>>+++");

                break;

            case DSLCalendarDayViewStartOfSelection:

                NSLog(@"DSLCalendarDayViewStartOfSelection>>>>+++");
                [[[UIImage imageNamed:@"DSLCalendarDaySelection-left"] resizableImageWithCapInsets:UIEdgeInsetsMake(20, 20, 20, 20)] drawInRect:self.bounds];

                break;

            case DSLCalendarDayViewEndOfSelection:
                NSLog(@"DSLCalendarDayViewEndOfSelection>>>>+++");

                [[[UIImage imageNamed:@"DSLCalendarDaySelection-right"] resizableImageWithCapInsets:UIEdgeInsetsMake(20, 20, 20, 20)] drawInRect:self.bounds];
                break;

            case DSLCalendarDayViewWithinSelection:

                NSLog(@"DSLCalendarDayViewWithinSelection>>>>+++");



                [[[UIImage imageNamed:@"DSLCalendarDaySelection-middle"] resizableImageWithCapInsets:UIEdgeInsetsMake(20, 20, 20, 20)] drawInRect:self.bounds];
                break;

            case DSLCalendarDayViewWholeSelection:

                NSLog(@" DSLCalendarDayViewWholeSelection");


                 NSLog(@"day select %@",selectedday);
                [[NSUserDefaults standardUserDefaults] setObject:selectedday forKey:@"day"];
                [[NSUserDefaults standardUserDefaults]synchronize];


                [[[UIImage imageNamed:@"DSLCalendarDaySelection"] resizableImageWithCapInsets:UIEdgeInsetsMake(20, 20, 20, 20)] drawInRect:self.bounds];

                break;
        }
    }
}

I think I found my answer 我想我找到了答案

  for (int i=0;i<datearray.count;i++) {

            dateSelected=[dateformatter dateFromString:[datearray objectAtIndex:i]];
            NSLog(@"date %@  dateselected %@",date,dateSelected);
            NSDateComponents *selected=[calendar components:flags fromDate:dateSelected];
            dateSelected=[calendar dateFromComponents:selected];
            NSLog(@"date %@ dateselected %@",date,dateSelected);
            if ([dateSelected isEqualToDate:date]) {  //just swapped values and date will be highlighted 
                NSLog(@"inside loop");
                [[UIColor grayColor]setFill];
            }
        }

Below is the sample code for comparing two dates used in one of my application .as i am getting one date from web service in string and the second one is the current date. 下面是示例代码,用于比较我的一个应用程序中使用的两个日期。因为我从Web服务中以字符串形式获取一个日期,而第二个是当前日期。

NSString *dateStr;//get the date in string here
dateStr=[dateStr substringToIndex: MIN(10, [dateStr length])];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];

NSDate *myEventDate =[[NSDate alloc]init];
NSDate *currentDate =[[NSDate alloc]init];

//has three possible values: NSOrderedSame,NSOrderedDescending, NSOrderedAscending

myEventDate=[dateFormatter dateFromString:dateStr];

//NSLog(@"my Event Date is: %@",myEventDate);
//NSLog(@"current Date %@",currentDate);

NSComparisonResult result = [currentDate compare:myEventDate];

switch (result)
{
    case NSOrderedAscending:

       // NSLog(@"Future Date");
        break;

    case NSOrderedDescending:

        //NSLog(@"Earlier Date");
        break;
    case NSOrderedSame:
        //NSLog(@"Today/Null Date Passed"); //Not sure why This is case when null/wrong date is passed
        break;
    default:
       // NSLog(@"Error Comparing Dates");
        break;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM