Как конвертировать метку времени в секундах с часовым смещением в локальную iOS NSDate? - PullRequest
0 голосов
/ 11 августа 2011

Я пытаюсь преобразовать отметку времени в секундах с 01.01.1970 с часовым смещением часового пояса (т.е. -6) в локальную дату NSD. Вот что у меня есть:

    NSInteger startTime = 1312228800;
    NStInteger startTimeOffset = -6;
    NSDate *startTimeDate = [NSDate dateWithTimeIntervalSince1970:startTime];

    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZZ"];
    [dateFormatter setLocale:[NSLocale currentLocale]];        

    NSInteger gmtOffset = [startTimeOffset intValue]*60*60;
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:gmtOffset]];        
    NSDate *newStartTimeDate = [dateFormatter dateFromString:[dateFormatter stringFromDate:startTimeDate]];

Например, если у меня есть время 1312228800, я получаю 08/01/2011 20:00 в GMT 0. Фактическое время начала - 08/01/2011 14:00 в GMT -6. Однако локально на устройстве, если я базируюсь в EST, startTime должно быть установлено на 01.08.2011 16:00 GMT -4.

Однако я просто получаю тот же стартовый тайм без учета смещения, которое в приведенном выше примере 01.08.2011 20:00.

Есть идеи, где я ошибаюсь, есть ощущение, что это как-то связано с setDateFormat: аргумент?

1010 * ТНХ *

1 Ответ

1 голос
/ 11 августа 2011

Вам нужно использовать форматтер? Что-то вроде этого:

NSInteger offsetSecs = [startTimeOffset intValue] * 60 * 60;
NSDate *theDate = [NSDate dateWithTimeIntervalSince1970:(startTime + offsetSecs)];
...