Странное поведение только с одним устройством и NSDate

После нескольких недель работы я наконец опубликовал свое приложение вчера 🙂 20 iphones загрузили мое приложение, и только один из них имеет проблему. У меня нет абсолютно никакого способа отладить его, потому что у меня нет доступа к устройству, у которого есть проблема.

Прежде всего, я получаю json (который хорошо декодируется даже на устройстве), затем я извлекаю дату:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; [formatter setTimeZone:[NSTimeZone systemTimeZone]]; NSDate *date = [formatter dateFromString:[myData objectForKey:@"date"]]; 

Я хочу знать, когда была эта дата, поэтому я использую эту функцию:

 [DateManager getDateFromNow:date]; 

Что приводит к этому коду:

 + (NSString *) getDateFromNow: (NSDate*) aDate{ NSDate *now = [[NSDate alloc] init]; // Get the system calendar NSCalendar *sysCalendar = [NSCalendar currentCalendar]; // Get conversion to months, days, hours, minutes unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSSecondCalendarUnit; NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:aDate toDate:now options:0]; int second =[conversionInfo second]; int minute =[conversionInfo minute]; int hour =[conversionInfo hour]; int day =[conversionInfo day]; if(day != 0){ if(day == 1){ return [NSString stringWithFormat:@"1 day ago"]; }else{ return [NSString stringWithFormat:@"%i days ago", day]; } }else if(hour != 0){ if(hour == 1){ return [NSString stringWithFormat:@"1 hour ago"]; }else{ return [NSString stringWithFormat:@"%i hours ago", hour]; } }else if(minute !=0){ if(minute == 1){ return [NSString stringWithFormat:@"1 minute ago"]; }else{ return [NSString stringWithFormat:@"%i minutes ago", minute]; } }else{ if(second == 1){ return [NSString stringWithFormat:@"1 second ago"]; }else{ return [NSString stringWithFormat:@"%i seconds ago", second]; } } } 

Моя проблема в том, что только для одного устройства дата рассчитывается как «4932 дня назад», а для всех других устройств она работает хорошо. Вот дата: date: "2014-07-04 13:38:01"

Есть ли у вас какая-либо информация о том, что может быть неправильным?

Спасибо заранее…

4932 дней назад был первым январем 2001 года. Дата ссылки на яблоко.

    Я думаю, что проблема заключается в systemTimeZone или NSCalendar .

    Когда вы выполняете преобразование строки даты, вы должны установить NSCalendar.

     NSCalendar *sysCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; // set your NSDateFormatter with calendar. formatter.calendar = sysCalendar; 

    Это поможет, и еще одна вещь: вы всегда должны устанавливать дату или временную метку UTC с конца сервера.

    Благодарю. Может быть, это поможет вам.