Строка не конвертируется в дату согласно часовому поясу

Я получаю дату в виде строки с сервера, и мне нужно показать дату в соответствии с моим часовым поясом (индийский: 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??

1 ответ

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

Другие вопросы по тегам