У меня проблемы с преобразованием строки времени в другой часовой пояс.
Это пример строки, которую я получил с сервера: @ "14.05.2013, 4:19"
Я знаю, что часовой пояс - Америка / Нью-Йорк, и я хочу преобразовать его в мой местный часовой пояс: Европа / Рим.
Вот код, который я написал для его проверки:
-(void) convertTimeZone
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.timeZone=[NSTimeZone timeZoneWithAbbreviation:@"GMT"];
dateFormatter.dateFormat=@"MM/dd/yyyy HH:mma";
NSString *sourceDateString = @"5/14/2013 4:19am";
NSTimeZone *sourceTimeZone = [[NSTimeZone alloc] initWithName:@"America/New_York"];
NSTimeZone *destinationTimeZone = [NSTimeZone localTimeZone];
NSInteger sourceGMToffset = sourceTimeZone.secondsFromGMT;
NSInteger destinationGMToffset = destinationTimeZone.secondsFromGMT;
NSInteger interval = destinationGMToffset-sourceGMToffset;
NSLog(@"DateFormatter TimeZone: %@", dateFormatter.timeZone);
NSLog(@"Source TimeZone: %@", sourceTimeZone);
NSLog(@"Destination TimeZone: %@", destinationTimeZone);
NSLog(@"sourceOffset: %u destinationOffset: %u interval: %u", sourceGMToffset, destinationGMToffset, interval);
NSLog(@"----------------------------------------------------------------------------------------------------");
NSLog(@"sourceDateString : %@", sourceDateString);
//Convert from string to date
NSDate *dateObject = [dateFormatter dateFromString:sourceDateString];
NSLog(@"From string to date: %@", dateObject);
//Now back from date to string
NSLog(@"From date to string: %@", [dateFormatter stringFromDate:dateObject]);
//Convert from sourceTimeZone to destinationTimeZone
NSDate *newDate = [[NSDate alloc] initWithTimeInterval: interval sinceDate:dateObject];
NSLog(@"destinationDateString: %@", [dateFormatter stringFromDate: newDate]);
}
вывод:
DateFormatter TimeZone: GMT (GMT) смещение 0
Источник TimeZone: America / New_York (GMT-04: 00), смещение -14400 (дневной свет)
Часовой пояс места назначения: местный часовой пояс (Европа / Рим (CEST), смещение 7200 (дневной свет))
sourceOffset: 4294952896 destinationOffset: 7200 интервал: 21600
sourceDateString: 14.05.2013, 4:19
От строки до даты: 2013-05-14 00:19:00 +0000
От даты до строки: 14.05.2013 00:19
destinationDateString: 14.05.2013 06:19
Я злюсь !!!!
Если исходная дата - «14.05.2013, 4:19», ПОЧЕМУ средство форматирования даты меняет ее на «14.05.2013 00:19» ????????? Если бы он правильно сохранил его до «14.05.2013 04:19 AM +0000», преобразование было бы идеальным (6 часов между двумя часовыми поясами) !!!
Намек?
Спасибо
Никола
ИЗМЕНИТЬ
Установив эти параметры в соответствии с рекомендациями lithu-t-v:
dateFormatter.timeZone=[NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSString *sourceDateString = @"5/14/2013 4:19am -0400";
Кажется, работает, но это не так.
Я говорю «кажется», потому что:
sourceDateString: 14.05.2013, 04:19 -0400
От строки до даты: 2013-05-13 04:19:00 +0000 (ОК)
От даты до строки: 14.05.2013, 04:19 (ОК)
destinationDateString: 14.05.2013, 10:19 (ПРАВИЛЬНО)
правильно, НО, если я попробую в поздний час:
sourceDateString: 14.05.2013 22:19 -0400
От строки до даты: 2013-05-14 16:19:00 +0000 (НЕПРАВИЛЬНО)
От даты до строки: 14.05.2013 16:19
destinationDateString: 14.05.2013 22:19 (НЕПРАВИЛЬНО!)
Правильный результат должен быть: 15.05.2013, 04:19.