2016-01-03 4 views
1

Я создаю приложение, которое получает строку даты (дата во французском времени) из базы данных. после того, как я получаю строку я преобразовать его в NSDate:NSDate получить местное время

NSString *dateStr = "20/3/2016 21:00 +0000"; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm zzz"]; 
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
[dateFormatter setTimeZone:gmt]; 
self.date = [dateFormatter dateFromString:dateStr]; 

В self.date я получаю (если я напечатать объект):

2016-06-10 21:00:00 +0000 

Но когда я пытаюсь преобразовать его в местное время:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"HH:mm"]; 
NSString *time = [formatter stringFromDate:cellItem.date]; 

Я получаю разное время: 00:00

Любая идея, что может быть пр oblem?

+0

Вы попробовали в другое время? Я думаю, что я помню некоторые странные преобразования часовых поясов. – vib

ответ

1

Часовой пояс по умолчанию для NSDateFormatter является часовым поясом устройства, и поскольку вы не задали его явно во втором формате, это то, что будет использоваться.

Используйте первый форматировщик для обоих рабочих мест или установить его в явном виде, как вы это делали в первом форматировщиком:

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
[dateFormatter setTimeZone:gmt]; 

Также примечание на:

В self.date я получить (если я напечатать объект)

Если вы используете NSLog() или отладчик для просмотра NSDate объекта, он будет использовать [NSDate description], чтобы сгенерировать строку, которая всегда будет использовать часовой пояс GMT. Это постоянно поднимает людей.

Смежные вопросы