【问题标题】:how to compare two NSString which have date如何比较两个具有日期的 NSString
【发布时间】:2013-06-28 07:44:04
【问题描述】:

我有两个具有日期的 NSString,如果它们都有相同的数据,那么如果它们应该可以工作,否则应该可以工作

这是我的代码

     NSString*test=data.addedDateTime;



    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy_MM_dd"];

    NSDate* date = [NSDate date];

    NSString* str = [formatter stringFromDate:date];
    NSString*addedDateTime=str;



    if ([test isEqualToString:str]) {


        [todayArray addObject:theObject];

        int count=[todayArray count];

        NSLog(@"Today array working %d",count);


    }

    else {

        [yesterdayArray addObject:theObject];

    }

当我使用 NSLog 检查两者的值相同时,我的代码总是运行 else

【问题讨论】:

    标签: iphone nsstring comparison nsdate


    【解决方案1】:

    不要比较两个代表日期的NSStrings,而是比较compare两个NSDates

    【讨论】:

      【解决方案2】:

      首先将字符串转换为日期并使用此[date1 isEqualToDate:date2]。这是两个日期的比较。

      使用这段代码我希望这段代码对你有用。

       NSString*test=data.addedDateTime;
      
      
      
          NSDateFormatter* df = [[NSDateFormatter alloc] init];
                  [df setDateFormat:@"yyyy_MM_dd"];
                  NSDate* d = [df dateFromString:test];
                  [df release];
      
          NSDate* date = [NSDate date];
      
      
          if ([d isEqualToDate:date) {
      
      
              [todayArray addObject:theObject];
      
              int count=[todayArray count];
      
              NSLog(@"Today array working %d",count);
      
      
          }
      
          else {
      
              [yesterdayArray addObject:theObject];
      
          }
      

      【讨论】:

        【解决方案3】:
        NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
                        [dateFormatter setDateFormat:@"yyyy-MM-dd"];
                        NSDate *date1 = [dateFormatter dateFromString:TodatDate];
        
                        NSDateFormatter *dateFormatte = [[[NSDateFormatter alloc] init] autorelease];
                        [dateFormatte setDateFormat:@"yyyy-MM-dd"];
                        NSDate *date2 = [dateFormatte dateFromString:ServerDate];
        
                        unsigned int unitFlags = NSDayCalendarUnit;
        
                        NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
                        NSDateComponents *comps = [gregorian components:unitFlags fromDate:date1  toDate:date2  options:0];
        
                        int days = [comps day];
                        NSLog(@"%d",days);
        

        【讨论】:

          【解决方案4】:

          如果日期不相等或格式不同,条件[test isEqualToString:str] 总是给出NO。所以不要用这个。 使用NSDateComponent 比较两个日期或比较为@Andrey Gordeev 说。

          【讨论】:

            【解决方案5】:

            尝试使用此代码进行日期之间的任何比较...您不应该以字符串的形式比较日期。比较转换为字符串之前的日期。使用格式化程序的dateFromString 函数将字符串“test”转换为日期格式,方法是将确切的日期格式指定为测试的日期格式。然后使用以下函数比较日期。

            NSString*test=data.addedDateTime;
            NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
            [formatter setDateFormat:@"yyyy_MM_dd"];
            
            NSDate *newDate = [formatter dateFromString:data.addedDateTime]; // other date 
            NSDate *today = [NSDate date]; // current date
            
            NSComparisonResult result; 
            
            result = [today compare:newDate]; // comparing two dates
            
            if(result == NSOrderedSame)
                {
                [todayArray addObject:theObject];
            
                int count=[todayArray count];
            
                NSLog(@"Today array working %d",count);
            }
            else
                {
            
                [yesterdayArray addObject:theObject];
            
                }
            

            【讨论】:

              【解决方案6】:

              而不是比较字符串比较日期。像这样,

              NSDate *myDate1 =data.addedDateTime;
              NSDate* mydate2 = [NSDate date];
              
              if ([myDate1 compare:mydate2] == NSOrderedDescending) {
                  NSLog(@"Dilip myDate1 is later than myDate2");
              
              } else if ([myDate1 compare:mydate2] == NSOrderedAscending) {
                  NSLog(@"Dilip myDate1 is earlier than myDate2");
              
              } else {
                  NSLog(@"Dilip dates are the same");
              
              }
              

              【讨论】:

              • -[__NSDate length]: 无法识别的选择器发送到实例 0x5b54ac0
              • @JawAli 检查我的答案,现在我已经编辑了它。对不起,午休时间回复晚了。。现在我已经测试了它运行完美的代码。如果仍然出现错误,而不是检查 data.addedDateTime是否有效。
              【解决方案7】:
              first u should convert date to nsstring..
              then u set perfect date formate in both string..
              like
               NSDate *today1 = [NSDate date];
                NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
               [dateFormat setDateFormat:@"dd-MM-yyyy"];
                NSString *dateString11 = [dateFormat stringFromDate:today1];
                [dateString11 retain];
              ur first string is like dateString11
              
              and other date string is like str2=@"03-10-2010";
              
              then u compare two string
              
               if ([dateString11 isEqualToString:str2]) {
              
              
                      [todayArray addObject:theObject];
              
                      int count=[todayArray count];
              
                      NSLog(@"Today array working %d",count);
              
              
                  }
              

              【讨论】:

                猜你喜欢
                • 2011-01-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多