Я конвертирую строковую дату / время в числовое значение времени. В моем случае я использую его только для того, чтобы определить, является ли что-то более новым / более старым, чем что-либо еще, поэтому эта небольшая десятичная проблема не является реальной проблемой. Это не должно быть с точностью до секунды. Но все же это заставляет меня чесать голову, и я хотел бы знать, почему ..
Моя дата записана в строковом формате @ "2010-09-08T17: 33: 53 + 0000". Поэтому я написал этот маленький метод для возврата значения времени. До того, как кто-то подскакивает на сколько секунд в месяцах с 28 днями или 31 днем, мне все равно. В моей математике хорошо предположить, что все месяцы имеют 31 день, а годы - 31 * 12 дней, потому что мне не нужна разница между двумя моментами времени, только чтобы узнать, является ли один момент времени позже другого.
-(float) uniqueTimeFromCreatedTime: (NSString *)created_time {
float time;
if ([created_time length]>19) {
time = ([[created_time substringWithRange:NSMakeRange(2, 2)]floatValue]-10) * 535680; // max for 12 months is 535680.. uh oh y2100 bug!
time=time + [[created_time substringWithRange:NSMakeRange(5, 2)]floatValue] * 44640; // to make it easy and since it doesn't matter we assume 31 days
time=time + [[created_time substringWithRange:NSMakeRange(8, 2)]floatValue] * 1440;
time=time + [[created_time substringWithRange:NSMakeRange(11, 2)]floatValue] * 60;
time=time + [[created_time substringWithRange:NSMakeRange(14, 2)]floatValue];
time = time + [[created_time substringWithRange:NSMakeRange(17, 2)]floatValue] * .01;
return time;
}
else {
//NSLog(@"error - time string not long enough");
return 0.0;
}
}
При передаче той самой строки, указанной выше, результат должен быть 414333.53, но вместо этого он возвращает 414333.531250.
Когда я каждый раз бросаю NSLog =, чтобы отследить, где он происходит, я получаю такой результат:
time 0.000000
time 401760.000000
time 413280.000000
time 414300.000000
time 414333.000000
floatvalue 53.000000
time 414333.531250
Created Time: 2010-09-08T17:33:53+0000 414333.531250
Так что последнее значение floatValue вернуло 53.0000, но когда я умножил его на 0,01, оно превратилось в .53125. Я также попробовал intValue, и он сделал то же самое.