【问题标题】:Comparing two NSDates returning 0 or equal比较两个返回 0 或等于的 NSDates
【发布时间】:2016-09-17 04:39:28
【问题描述】:

我在比较两个NSDates 时遇到问题。我没有得到正确的价值,我哪里出错了。

首先我比较了使用NSDatecompare 方法返回0,然后我尝试通过调用timeIntervalSince1970 将其转换为浮点数,它给出了相同的输出。 我做错了什么,我没有得到。

这是我所做的简单尝试。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd/MM/YYYY"];

NSString *date1String = @"01/01/2016";
NSString *date2String = @"03/01/2016";

float date1 = [[formatter dateFromString:date1String] timeIntervalSince1970];
float date2 = [[formatter dateFromString:date2String] timeIntervalSince1970];

if (date1 > date2) {
    NSLog(@"date1 is later than date2");

} else if (date1 < date2){
    NSLog(@"date1 is earlier than date2");

} else {
    NSLog(@"date1 is Equal date2 %f \n%f",date1,date2);
}

【问题讨论】:

    标签: ios objective-c nsdate nsdateformatter date-comparison


    【解决方案1】:

    首先你的日期格式是错误的,它应该是dd/MM/yyyy 也使用compare 来比较NSDate 对象。

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"dd/MM/yyyy"];
    
    NSString *date1String = @"01/01/2016";
    NSString *date2String = @"03/01/2016";
    
    NSDate *date1 = [formatter dateFromString:date1String];
    NSDate *date2 = [formatter dateFromString:date2String];
    if ([date1 compare:date2] == NSOrderedDescending) {
        NSLog(@"date1 is later than date2");
    } else if ([date1 compare:date2] == NSOrderedAscending) {
        NSLog(@"date1 is earlier than date2");
    } else {
        NSLog(@"dates are the same");
    } 
    

    【讨论】:

    • 谢谢,问题是 YYYY。它现在正确显示。 :)
    • 如果您不将 YYYY 更改为 yyyy,您将无法获得正确的日期。
    • 不要使用双精度,使用 NSTimerInterval。并使用正确的日期格式更新答案。
    • @SahebSingh 如果你使用YYYY date1 和 date2 包含相同的值1450549800 这是错误的,如果你使用yyyy,你会得到1451586600 for date1 和1451759400 for @ 987654330@是正确的。
    • @rmaddy 感谢您的纠正,我的意思是日期格式是错误的,建议正确的,但仍然使用错误的。
    猜你喜欢
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    相关资源
    最近更新 更多