я вручную создал дату в будущем, с этим кодом:NSDateComponentsFormatter будущее время +1.998730003833771 результаты в «1» второй строке
[[NSDate date] dateByAddingTimeInterval: s + 60*m + 60*60*h ];
я прохожу в 2 для «с», и 0 для «м "и" h ". Результатом этого является объект NSDate, который будет ровно 2 секунды в будущем.
Затем несколько вызовов функций позже, я пытаюсь получить строку для этой даты, используя NSDateComponentsFormatter. Я делаю следующие вызовы:
NSCalendar* calendar = [NSCalendar currentCalendar];
calendar.locale = self.locale;
calendar.timeZone = self.timeZone;
NSCalendarUnit units = NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents* deltaComponents = [calendar components:units fromDate:[NSDate date] toDate:to options:0];
deltaComponents.calendar = calendar;
NSString *result = [self.componentFormatter stringFromDateComponents:deltaComponents];
Проблема заключается в том, что к тому времени, когда я звоню
[calendar components:units fromDate:[NSDate date] toDate:to options:0];
Там было очень небольшое изменение во времени! Настройка журнала, как это показывает нам вопрос:
NSLog(@"TIME INTERVAL SINCE NOW: %@",@([date timeIntervalSinceNow]));
1.998730003833771
Результирующая строка:
"1 второй"
Здесь Вы можете увидеть мое разочарование. Я хотел бы, чтобы NSDateComponentsFormatter обошел эту небольшую разницу до «2 секунд», но я не могу понять, как это сделать.
Странно, ни одно из этих решений не работает (2.99 или 2.5). Результат из этого утверждения: NSLog (@ "ВРЕМЯ ИНТЕРВАЛ СЕЙЧАС:% @", @ ([date timeIntervalSinceNow])); По-прежнему 1.998730003833771 – ermterm
@ermterm Вам также нужно добавить 'NSCalendarUnitSecond' в свои' units', иначе вы обрезаете что-либо ниже секунды. – Sulthan
Если вы прокручиваете по горизонтали в разделе кода моего первоначального ответа, вы увидите, что значение «NSCalendarUnitSecond» есть. :( – ermterm