Существует много быстрых алгоритмов CRC, которые должны добиться цели: http://www.google.com/search?hl=en&q=fast+crc&aq=f&oq=
Редактирование: , Почему ненависть? CRC является полностью соответствующим, как свидетельствуется другими ответами. Поиск Google был также соответствующим, так как никакой язык не был определен. Это - старая, старая проблема, которая была решена так много раз, что, вероятно, не будет категорического ответа.
Как вы обнаружили, то, что у вас есть сейчас, довольно подвержено ошибкам. Он не только может сбиться с пути из-за перехода на летнее время, но и что, если у вашего пользователя не грегорианский календарь? Тогда дни не будут длиться 24 часа.
Вместо этого используйте NSCalendar
и NSDateComponents
, которые были специально разработаны для этого:
+ (NSDate *)getForDays:(int)days fromDate:(NSDate *)date
{
NSDateComponents *components= [[NSDateComponents alloc] init];
[components setDay:days];
NSCalendar *calendar = [NSCalendar currentCalendar];
return [calendar dateByAddingComponents:components toDate:date options:0];
}
Используйте NSCalendar для выполнения вычислений, подобных этому . Это не только с большей вероятностью сработает, но и ваш код будет более понятным.
Я понятия не имею, какой язык или систему вы здесь используете, но я бы посоветовал выполнять все ваши вычисления, используя время как UTC, и использовать только местное время, когда вы приходите для отображения Это.
В большинстве операционных систем и языков при преобразовании всемирного координированного времени в местное время учитывается временной пояс и переход на летнее время.