Строка не преобразуется в дату в соответствии с часовым поясом

Я получаю дату в виде строки с сервера, и мне нужно показать дату в соответствии с моим часовым поясом (индийский: GMT +5:30). Вот мой код

NSString *dateString = @"2015-08-10 11:45:10";

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

    //Create the date assuming the given string is in GMT
    dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
    NSDate *date = [dateFormatter dateFromString:dateString];

    NSLog(@"%@",date);

    NSLog(@"%@",[dateFormatter stringFromDate:date]);

    //Create a date string in the local timezone
    dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:[NSTimeZone localTimeZone].secondsFromGMT];
    NSString *localDateString = [dateFormatter stringFromDate:date];
    NSLog(@"date = %@", localDateString);

    NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];

    [dateFormatter2 setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:[NSTimeZone localTimeZone].secondsFromGMT];

    NSDate *date2 = [dateFormatter2 dateFromString:localDateString];

    NSLog(@"%@",date);

И журнал:

2015-08-10 11:45:10 +0000 (NSDate)
2015-08-10 11:45:10 (NSString)
date = 2015-08-10 17:15:10 (NSString)
2015-08-10 11:45:10 +0000 (NSDate)

Моя проблема связана с последним журналом (2015-08-10 11:45:10 +0000). Почему это не 2015-08-10 17:15:10??


person Developer    schedule 04.08.2015    source источник


Ответы (1)


Последняя строка печатает то, что она делает, потому что вы печатаете NSDate, а NSDate не имеет часового пояса. У него буквально нет атрибута или внутреннего состояния, указывающего на часовой пояс. Часовые пояса существуют только для представления данных пользователям, как это обычно делается через NSDateFormatter. Но если вы зарегистрируете значение NSDate, вы получите строку GMT, поскольку у самого NSDate нет часового пояса.

person Tom Harrington    schedule 04.08.2015