Найти точную разницу между двумя датами - PullRequest
2 голосов
/ 28 декабря 2010

Я хочу внести некоторые изменения в сравнение дат.

В моем приложении я сравниваю две даты и получаю разницу как количество дней, но если разница только в один день, система показывает мне 0 как разницу дней.

NSDateFormatter *date_formater=[[NSDateFormatter alloc]init];
[date_formater setDateFormat:@"MMM dd,YYYY"];

NSString *now=[NSString stringWithFormat:@"%@",[date_formater stringFromDate:[NSDate date]]];
LblTodayDate.text = [NSString stringWithFormat:@"%@",[NSString stringWithFormat:@"%@",now]];

NSDate *dateofevent = [[NSUserDefaults standardUserDefaults] valueForKey:@"CeremonyDate_"];
NSDate *endDate =dateofevent;

NSDate *startDate = [NSDate date];

gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
unsigned int unitFlags = NSDayCalendarUnit;

NSDateComponents *components = [gregorian components:unitFlags fromDate:startDate toDate:endDate options:0];

int days = [components day];

Я нашел некоторые решения, которые, если мы сделаем время 00:00:00 для сравнения, тогда он покажет мне правильный ответ, я прав или нет, я не знаю.

Ответы [ 4 ]

4 голосов
/ 28 декабря 2010

я думаю, что это не правильно, сделайте время 00: 00: 00.

может быть, вы получите разницу менее чем за 24 часа, поэтому она округляется, и вы 0 дней.Решение Alexander правильно, поэтому используйте такое решение, как -

, это также хорошо работает и для меня.

NSDate *endDate=[dateFormat dateFromString:now];
        NSTimeInterval interval = [CeremonyDate timeIntervalSinceDate:endDate];
        int diff=interval/86400;//for converting seconds into days.

Та же самая проблема округления фигуры, которую вы получаете здесь, но вы можете разобраться в ней нестабильным способом.

4 голосов
/ 28 декабря 2010

Я обычно нахожу разницу в секундах и вычисляю ceil(diffInSeconds / 86400).

0 голосов
/ 04 апреля 2015

Здесь решение префекта, чтобы найти разницу между двумя датами

- (NSString *)calculateDuration:(NSDate *)oldTime secondDate:(NSDate *)currentTime
{
    NSString *timeSincePost;
 NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSCalendarUnit unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:oldTime toDate:currentTime options:0];

    NSInteger year = [dateComponents year];
    NSInteger month = [dateComponents month];
    NSInteger day = [dateComponents day];
    NSInteger hour = [dateComponents hour];
    NSInteger minute = [dateComponents minute];
    NSInteger second = [dateComponents second];

    if (year) {
        timeSincePost = [NSString stringWithFormat:@"%ld%@", (long)year,[[kAppDelegate languageBundle] localizedStringForKey:@"y" value:@"" table:nil]];
    }
    else if (month) {
         timeSincePost = [NSString stringWithFormat:@"%ld%@", (long)month,[[kAppDelegate languageBundle] localizedStringForKey:@"M" value:@"" table:nil]];
    }
    if(day) {
        timeSincePost = [NSString stringWithFormat:@"%ld%@", (long)day,[[kAppDelegate languageBundle] localizedStringForKey:@"d" value:@"" table:nil]];
    }
    else if(hour) {
        timeSincePost = [NSString stringWithFormat: @"%ld%@", (long)hour,[[kAppDelegate languageBundle] localizedStringForKey:@"H" value:@"" table:nil]];
    }
    else if(minute) {
        timeSincePost = [NSString stringWithFormat: @"%ld%@", (long)minute,[[kAppDelegate languageBundle] localizedStringForKey:@"m" value:@"" table:nil]];
    }
    else if(second)
        timeSincePost = [NSString stringWithFormat: @"%ld%@", (long)second,[[kAppDelegate languageBundle] localizedStringForKey:@"s" value:@"" table:nil]];

    return timeSincePost;
}

и вызов вышеуказанной функции с двумя параметрами как NSDate

NSString *duration = [self calculateDuration:postDate secondDate:[NSDate date]];
lblPostTime.text = duration;

note :: postDate - FirstDate, а вторая дата - текущая дата.

0 голосов
/ 12 ноября 2013

Попробуйте этот код, чтобы получить две разные даты и времени.

  NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
        [dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]];
        [dateFormatter setDateFormat:@"mm:ss"];

        NSDate* firstDate = [dateFormatter dateFromString:@"04:45"];
        NSDate* secondDate = [dateFormatter dateFromString:@"05:00"];

        NSTimeInterval timeDifference = [secondDate timeIntervalSinceDate:firstDate];
        NSLog(@"%f",timeDifference);

Надеюсь, этот код будет вам полезен.

...