当前位置: 首页 > 知识库问答 >
问题:

将字符串中的月份和日期与当前日期的月份和日期进行比较

西门嘉石
2023-03-14

我有一个JSON对象,它有几个日期,例如:15/12/2005或14/12/2012。

我需要将月份和日期与今天的月份和日期进行比较;年份无关紧要。我正在这样做:

-(void)setSingle:(NSDictionary*)object name:(NSString*)name {

    NSMutableDictionary * content = [[NSMutableDictionary alloc] initWithDictionary:[[NSUserDefaults standardUserDefaults] objectForKey:name]];

    NSLog(@"%@", name);

    if(name == @"teste") {
        NSDate *dateReturn = [[NSDate alloc] init];
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"dd-MM"];

        NSString * tempDate;
        NSDictionary *dateObjectTemp = nil;
        NSDictionary * dateObject = [object objectForKey:name];

        for (NSDictionary*g in dateObject) {
            tempDate = [g objectForKey:@"dia"];
            dateObjectTemp = g;

            NSLog(@"Data: %@", tempDate);

            dateReturn = [dateFormatter dateFromString:tempDate];

            NSLog(@"Data: %@", dateReturn);
            [content setObject:dateObjectTemp forKey:tempDate];
        }

    } else {
        NSDate *dateReturn = [[NSDate alloc] init];
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"dd-MM-yyyy"];

        NSString * tempDate;
        NSDictionary *dateObjectTemp = nil;
        NSDictionary * dateObject = [object objectForKey:name];

        for (NSDictionary*g in dateObject) {
            tempDate = [g objectForKey:@"dia"];
            dateObjectTemp = g;

            dateReturn = [dateFormatter dateFromString:tempDate];
            [content setObject:dateObjectTemp forKey:tempDate];
        }
    }

    NSDictionary* cont =content;
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:name];

    [[NSUserDefaults standardUserDefaults] setObject:cont forKey:name];

}

这会选择日期,但dataBack返回2000-12-15。我只想要日期和月份。

什么时候会比较下一个方法

-(void)showContent{

    if ( [self daysBetweenDate:currentDate andDate:self.dateLimit]>=0 ) {

        NSDictionary *santododia  = [super compareDate:currentDate name:@"santos"];
        [self defineContent:[santododia objectForKey:@"texto"]];

        self.urlShare = [santododia objectForKey:@"url"];
        self.tituloShare = [santododia objectForKey:@"titulo"];
    }else{
        [self.webView loadHTMLString: @"<font color='black' style='font-family:sans-serif;'>Conteúdo indisponível, escolha a data de hoje ou anterior</font>" baseURL:nil];
    }
}

虽然当前日期匹配,但测试不通过。

-(void) defineContent:(NSString *)string{

    string = [parentClass checkStringContent:string];
    NSLog(@"Teste: %@", string);
    if(string.length == 0){
       string = @"<font color='black' style='font-family:sans-serif;'>nothing</font>";
    } else {
        string =  [NSString stringWithFormat: @"%@ %@", string , @"<style>body {color:#000 !important} .day{margin-top:5px} .month{margin-top:5px}  </style>" ];
    }

    [self.webView loadHTMLString: string baseURL:nil];

}

共有2个答案

龙星辰
2023-03-14

尝试用这个来比较日期-

NSDate *minDate ;
NSDate *maxDate ;

NSComparisonResult compareStart = [minDate compare: self.selectedDate]; // date1 is 6/6/2011 00:00
NSComparisonResult compareEnd = [maxDate compare: self.selectedDate];   // date2 is 9/6/2011 00:00

if ( ( (compareStart == NSOrderedAscending) || (compareStart == NSOrderedSame) ) && (compareEnd == NSOrderedDescending))
{
    NSLog(@"date is in the right range");
}
else {
    NSLog(@"Range is not valid .");
}
常光明
2023-03-14

若要只比较日期的部分,应该使用< code>NSDateComponents。使用< code>NSDateFormatter将字符串解析为< code>NSDate:

NSString * jsonDateString = @"15/12/2005";
NSDateFormatter * dF = [NSDateFormatter new];
// Format string must match date string!
dF.dateFormat = @"dd/MM/yyy";

NSDate * testDate = [dF dateFromString:jsonDateString];
NSDate * today = [NSDate date];

然后,您可以使用NSCalendar将该日期和今天的日期分解为您感兴趣的部分:

NSCalendar * cal = [NSCalendar currentCalendar];
NSDateComponents * todayComps = [cal components:NSCalendarUnitMonth|NSCalendarUnitDay
                                       fromDate:today];
NSDateComponents * testComps = [cal components:NSCalendarUnitMonth|NSCalendarUnitDay
                                      fromDate:testDate];

然后,您可以比较这些日期组件对象

[testComps isEqual:todayComps]

如果结果为 YES,则两个日期具有相同的日和月,忽略日期的所有其他部分,包括年份。

 类似资料:
  • 问题内容: 我有一张桌子,看起来像: 我想对过去3个月(不包括当月)的数量求和。我的where子句当前看起来像: 它有效,但丑陋和侮辱。关于使其更漂亮有什么建议吗?非常感谢! 问题答案: 没什么好… 但是,可以将嵌套的DATEADD用作计算列和索引列 这使

  • 我试着比较这两个日期: 不工作会导致此错误:

  • 我不确定这是否可能? 我得拿到密码才能读 今天的月份即2月今天的日期即17月底的日期即31日,然后是一年中的其他11个月,在一行中按顺序排列 8月1日-31日|9月|10月|11月|12月|1月|2月|3月|4月|5月|6月|7月 请以最佳方式提供任何建议? 多谢 定时(timing的缩写)

  • 问题内容: 我需要Java中本月的开始日期和结束日期。当JSP页面加载了当前月份时,它将自动计算该月份的开始和结束日期。它应该与年份和月份无关。也就是说某个月有31天或30天或28天。这也应该满足a年。你能帮我吗? 例如,如果我在列表框中选择“五月”,则需要开始日期为1,结束日期为31。 问题答案: 你去了: PS:类只是两个值的一对。

  • 问题内容: 我需要用mysql减去1个月零4天,我看到命令 完美适用于1个月但1个月零4天,使用31天对于每个月带来30、29、28的每月无效。我无法添加31 + 4,30 + 4,等等 问题答案: 使用 [docs] 像:

  • 问题内容: 如何从数据库中获取查询的开始日期和结束日期。 谢谢, 问题答案: http://sqltutorials.blogspot.com/2007/06/sql-first-and-last-day-of- month.html 唯一没有涉及的是如何获取当前日期…请参阅rexem的帖子。