Перевод даты / времени в местное время пользователя - проблема - PullRequest
1 голос
/ 24 августа 2011

Мое приложение получает дату / время с удаленного сервера, который всегда находится в часовом поясе GMT ​​+1 (UTC / GMT +1 час).

Формат, который предоставляет сервер:

24 08 2011 08:45 PM

Я хотел бы преобразовать эту метку времени в эквивалентное время / дату часового пояса пользователя (пользователь может находиться в любой точке мира).

Таким образом, в качестве примера: 24 08 2011 08:45 PM с сервера должен быть представлен

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 Ответ

4 голосов
/ 24 августа 2011

Просто установите timeZone в 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:45 PM (GMT). Затем преобразовать это в строку с локальнымраз просто наберите следующее,

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd MM yyyy hh:mma"];
NSString *stringFromDAte = [dateFormatter stringFromDate:dateString];
...