Проблема с вычислением разницы между двумя датами

Мне нужно рассчитать разницу между двумя днями в минутах.

NSDate *now = [[NSDate alloc] init];

NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
    [outputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
    [outputFormatter setDateFormat:@"dd/MM/yyyy hh:mm:ss a"];

    NSString* dateStringFromDatabase = @"01/01/1900 11:00:00 AM";

    NSDate* dateFromString = [outputFormatter dateFromString:dateStringFromDatabase];

NSString* a = [outputFormatter stringFromDate:now];
    NSDate* b = [outputFormatter dateFromString:a];

    NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

    unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit;

    NSDateComponents *components = [gregorian components:unitFlags fromDate:dateFromString
                                                  toDate:b options:0];

    int hours = [components hour];
    int minutes = [components minute];

    self.lblResult.text = [NSString stringWithFormat:@"%i:%i", hours, minutes];

Но у меня есть следующие проблемы: В течение текущих часов я получаю:

2012-10-21 07:37:09 +0000 // wrong it's two hours late

Когда я пытаюсь преобразовать @"01/01/1900 11:00:00 AM" в NSDate, я получаю

1900-01-01 10:00:00 +0000 // also two hours late

person 1110    schedule 19.10.2012    source источник


Ответы (3)


Попробуй это..................

если у вас есть дата в строке, преобразуйте ее в дату, используя @"dd/MM/yyyy hh:mm:ss a"

NSDate *startDate = ...;
NSDate *endDate = ...;

Сейчас Сравнение дат

// Date Comparision
NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit;

NSDateComponents *components = [gregorian components:unitFlags fromDate:LastDate
                                              toDate:CuurentDate options:0];

Получение разницы между двумя датами

int months = [components month];
int days = [components day];
int hours = [components hour];
int minutes = [components minute];
person Wolverine    schedule 20.10.2012
comment
Я не хочу вычислять разницу между двумя NSDate, а только между часами. Мой первый NSDate - 1900-01-01 10:00:00 +0000, а второй - 2012-10-20 15:50:53 +0000, когда я пытаюсь получить минуты между теми, которые я получаю 59328354,93... как только сравнивать время, это все, что мне нужно? - person 1110; 20.10.2012
comment
Хорошо.....У тебя две даты. после этого часть сравнения «Начать с даты» из приведенного выше ответа ...... и среднее время ..... From int минут = [компоненты минуты]; вы получите разницу между двумя датами в минутах..... Попробуйте код выше.... он сделает это - person Wolverine; 20.10.2012
comment
@Downvoter: если вы проголосуете против .... пожалуйста, укажите причину ..... я хотел бы знать, в чем моя ошибка ..... - person Wolverine; 21.10.2012
comment
@1110: используйте @dd/MM/yyyy hh:mm:ss для NSDateFormatter. - person Wolverine; 21.10.2012
comment
@max_: спасибо..... не видел этого.... я думал, что он будет использовать формат, который я сказал ему использовать в самом начале моего ответа.. - person Wolverine; 21.10.2012
comment
Я отредактировал свой вопрос на основе вашего ответа. У меня все еще есть некоторые проблемы, не могли бы вы проверить отредактированный вопрос... - person 1110; 21.10.2012

Вам нужно установить -dateStyle, а не стиль времени, так как в этой строке также содержится дата.

Редактировать---

Теперь вам нужно изменить -dateFormat на dd/MM/yyyy HH:mm:ss a

person max_    schedule 19.10.2012
comment
Я не понимаю? Что я должен делать? Должен ли я хранить дату и время в базе данных в другом формате? - person 1110; 19.10.2012

надеюсь, это поможет

    NSString *dtString = @"1900-01-01T11:00:00";
    dtString = [dtString stringByReplacingOccurrencesOfString:@"T" withString:@" "];
    NSDate *today = [NSDate date];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
    NSString *currentTime = [dateFormatter stringFromDate:today];
    NSDate *toTimeDate = [dateFormatter dateFromString:dtString];
    NSString *toTime = [dateFormatter stringFromDate:toTimeDate];
person Sahil Tyagi    schedule 19.10.2012