Перевод даты / времени в местное время пользователя - выпуск
Мое приложение получает дату / время с удаленного сервера, который всегда находится в часовом поясе GMT +1 (UTC/GMT +1 час).
Формат, который предоставляет сервер:
24 08 2011 08:45 PM
Я хотел бы преобразовать эту временную отметку в эквивалентное время / дату часового пояса пользователя (пользователь может находиться в любой точке мира).
Таким образом, в качестве примера: 24 08 2011 08:45PM с сервера
24 08 2011 21:45 итальянскому пользователю (Рим) (GMT + 1)
Этот код работает на некоторых часовых поясах, но у меня плохое предчувствие, что в этом что-то не так и что есть гораздо более элегантный способ сделать это
NSString *dateString = @"24 08 2011 09:45PM";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd MM yyyy hh:mma"];
NSDate *dateFromString = [[[NSDate alloc] init] autorelease];
dateFromString = [dateFormatter dateFromString:dateString];
NSDate* sourceDate = dateFromString;
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"BST"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];
NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;
NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate] ;
NSString *thePubDate = [dateFormatter stringFromDate:destinationDate];//[appLogic getPubDate];
NSLog(@"Result : %@",thePubDate);
[dateFormatter release];
//[dateFromString release];
[destinationDate release];
Буду признателен за ваши мысли и предложения по этому вопросу
1 ответ
Просто установите часовой пояс в dateFormatter, этого кода достаточно
NSString *dateString = @"24 08 2011 09:45PM";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd MM yyyy hh:mma"];
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"BST"];
[dateFormatter setTimeZone:sourceTimeZone];
NSDate *dateFromString = [dateFormatter dateFromString:dateString];
DateFromString теперь будет иметь дату 24 08 2011 08:45PM(GMT). Затем, чтобы преобразовать это в строку с местным временем, просто наберите следующее,
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd MM yyyy hh:mma"];
NSString *stringFromDAte = [dateFormatter stringFromDate:dateString];