Дата возврата NSDateFormatter в конкретном часовом поясе по Гринвичу

Я хочу получить дату и время в определенном часовом поясе. Я правильно понимаю большинство вещей, но только в конце, когда я получаю дату от NSString с помощью метода NSDateFormatter, он возвращает мне дату в конкретном часовом поясе GMT. Метод [formatter stringFromDate:gmtDate]; возвращает мне ожидаемую дату и время. Проблема возникает, когда я получаю дату из строки i-e, когда я выполняю этот метод self.localTime = [formatter dateFromString:str];. self.localTime — это свойство NSDate в моем классе.

Поэтому, когда я печатаю str, он дает мне дату и время в этом конкретном часовом поясе, который представлен как self.timeZoneID, который также является property в моем классе.

        NSDate *gmtDate = [NSDate date];
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setTimeZone:[NSTimeZone timeZoneWithName:self.timeZoneID]];
        [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        NSString *str = [formatter stringFromDate:gmtDate];
        NSLog(@"Date string : %@", str);
        self.localTime = [formatter dateFromString:str];

Любая идея, что может быть причиной того, что я получаю правильный вывод строки, но когда я назначаю его своему property localTime, это дает мне время в GMT


person Abdul Samad    schedule 15.09.2014    source источник
comment
Объект NSDate — это время по Гринвичу. Вы не можете изменить это (не нарушая некоторых правил) и не должны.   -  person Hot Licks    schedule 15.09.2014
comment
возможный дубликат Set NSDate TimeZone?   -  person Hot Licks    schedule 15.09.2014


Ответы (1)


Причина в том, что NSDate имеет часовой пояс по умолчанию, который является GMT для рассмотрения, и когда пользователь хочет указать время для некоторого часового пояса, тогда NSDateFormatter предоставляет способ установить конкретный часовой пояс, который вы используете для объекта gmtDate, а не для self.localTime ( это берет GMT, часовой пояс по умолчанию).

person nikhil84    schedule 15.09.2014
comment
Итак, как это сделать... я имею в виду self.localTime = [дата NSDate]; а затем self.localTime = [formatter dateFromString: [formatter stringFromDate: self.localTime]]; я пробовал это, это тоже не работает.... - person Abdul Samad; 15.09.2014
comment
Чего именно вы пытаетесь добиться?! - person nikhil84; 15.09.2014
comment
Я хочу получить NSDate в определенном часовом поясе. Я хочу, чтобы объект NSDate не был объектом NSString. - person Abdul Samad; 15.09.2014
comment
Для определенного часового пояса вам нужно применить средство форматирования, а затем использовать строку, которую вы получаете, поскольку в nsdate по умолчанию используется GMT. Вот почему nsdateformatter предназначен для получения времени в соответствии с часовым поясом нашего местоположения или в случае, если вы хотите показать время в соответствии с другим часовым поясом. Так что лучше сохраните str после использования форматтера. Также просто проверьте время nsdate и время по Гринвичу (в Google), тогда вы его получите. - person nikhil84; 15.09.2014