Мое приложение получает данные из веб-службы (PHP), которая предоставляет даты в следующем формате:
endDate = {
date = "2020-09-30 16:16:08.000000";
timezone = "-04:00";
"timezone_type" = 1;
};
Это код, который я использовал для преобразования в NSDate, и он работает, насколько яможет сказать, в каждом тесте, но он не работает на нескольких устройствах в соответствии с пользовательскими отчетами и журналами отладки.
Обратите внимание, что правильное преобразование этой даты определяет, разблокировано ли содержимое в приложении, поэтому в случае сбоя клиенты связываются с нами по этому поводу.
NSDictionary* dateDict = [responseDict objectForKey:@"endDate"];
NSString* strEndDate = [dateDict objectForKey:@"date"];
NSString* strOffset = [dateDict objectForKey:@"timezone"];
NSTimeInterval zoneSeconds = 0;
NSRange rng = [strOffset rangeOfString:@":"];
if (rng.location != NSNotFound && rng.location >= 1)
{
NSString* hoursOnly = [strOffset substringToIndex:rng.location];
NSInteger offsetValue = [hoursOnly integerValue];
zoneSeconds = (3600 * offsetValue);
}
NSDateFormatter* df = [[NSDateFormatter alloc] init];
NSTimeZone *timeZone = [NSTimeZone timeZoneForSecondsFromGMT:zoneSeconds];
[df setTimeZone:timeZone];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss.000000"];
NSDate* newEndDate = [df dateFromString:strEndDate];
Однако журналы отладки от нескольких пользователей показывают, что вызов dateFromString завершился неудачно и возвращает ноль.
У нас есть один пользователь, у которого есть 2 устройства iOS и которые используют одну и ту же учетную запись (ту же дату), приложение работает, как ожидалось, на одном из них, но не работает на другом.Тот же Apple ID, оба работают под управлением iOS12.Журналы отладки показывают, что оба устройства получили одинаковую дату с сервера, но одному из них не удалось преобразовать дату из строки в NSDate.
Мое предположение до сих пор состоит в том, что на устройстве (ах) имеется какая-то настройка или конфигурация, в которой происходит сбой, которая отличается.Но я весь день возился с настройками календаря и даты и не могу этого сделать.Я знаю, что у данного пользователя оба устройства настроены на один и тот же часовой пояс.
Есть ли лучший, более правильный способ преобразования даты, который мог бы быть более надежным?