2015-12-28 1 views
0

я вручную создал дату в будущем, с этим кодом: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 секунд», но я не могу понять, как это сделать.

ответ

0

Вместо того, чтобы точно указать 2 секунд, добавьте 2.99 секунд. Это сделает все различия округлены.

Или вы можете добавить 2.5 для обычного закругления (< 0.5 закругляет,> 0.5 закругляет).

+0

Странно, ни одно из этих решений не работает (2.99 или 2.5). Результат из этого утверждения: NSLog (@ "ВРЕМЯ ИНТЕРВАЛ СЕЙЧАС:% @", @ ([date timeIntervalSinceNow])); По-прежнему 1.998730003833771 – ermterm

+0

@ermterm Вам также нужно добавить 'NSCalendarUnitSecond' в свои' units', иначе вы обрезаете что-либо ниже секунды. – Sulthan

+0

Если вы прокручиваете по горизонтали в разделе кода моего первоначального ответа, вы увидите, что значение «NSCalendarUnitSecond» есть. :( – ermterm

1

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

Просто сохраните первоначальное значение [NSDate date] перед вызовом datebyAddingTimeInterval, а затем использовать это значение вместо вызова [NSDate date] снова.

Любая попытка округления и т. Д. Звучит как «фактор выдумки», и они никогда не подходят для использования.

Смежные вопросы