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

Я получаю дату и время с этой пустотой:

-(void)getDay
{

NSDate *choice = [NSDate date];

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

[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];

[dateFormatter setDateFormat:@"yy"];
year = [[dateFormatter stringFromDate:choice] intValue];

[dateFormatter setDateFormat:@"MM"];
month = [[dateFormatter stringFromDate:choice] intValue];

[dateFormatter setDateFormat:@"dd"];
day = [[dateFormatter stringFromDate:choice] intValue];


[dateFormatter setDateFormat:@"HH"];
hour = [[dateFormatter stringFromDate:[NSDate date]] intValue];

//   NSLog(@"hour: %d",hour);

[dateFormatter setDateFormat:@"mm"];
minute = [[dateFormatter stringFromDate:[NSDate date]] intValue];

[dateFormatter setDateFormat:@"ss"];
second = [[dateFormatter stringFromDate:[NSDate date]] intValue];

}

если я вижу час в журнале... он дает мне правильный час в моем местном времени, но когда я помещаю это значение в другой NSDate, которое мне нужно, чтобы создать изменение часа и стать временем по Гринвичу, вот код, который я использую:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy HH:mm:SS"];
   // NSLog(@"hour: %d",hour);
  //this log still gives me the right hour

    [dateFormatter setTimeZone:[NSTimeZone localTimeZone]];

    self.myDate = [dateFormatter dateFromString:[NSString stringWithFormat:@"%d-%d-%d %d:%d:%d",day,month,year,hour,minute,second]];
  NSLog(@"my date: %@",myDate);

Этот последний журнал выглядит так:

2013-08-31 05:14:12.905 myApp[25987:904] моя дата: 2013-08-31 15:14:00 +0000

мой час должен быть 5:14, но вместо этого это 15:14, то есть время по Гринвичу... Почему это происходит и как я могу получить местное время, а не время по Гринвичу? Спасибо за любую помощь.


person Blue    schedule 31.08.2013    source источник
comment
возможный дубликат stackoverflow.com/questions/8466744/, stackoverflow.com/questions/4547379/.   -  person Martin R    schedule 31.08.2013
comment
Печать NSDate в консоли всегда будет показывать GMT. Если вы установите точку останова и посмотрите на нее в своих локальных переменных, вы увидите дату в местном часовом поясе.   -  person memmons    schedule 31.08.2013


Ответы (1)


В вашем коде нет ничего плохого. Проблема в том, что NSLog отображает дату по Гринвичу. Попробуйте поставить точку останова в NSLog, и вы увидите, что self.myDate имеет правильное время, тогда как NSLog отображает время по Гринвичу.

Я понял, что в строке форматирования вы используете SS для секунд. Вы должны использовать сс.

person Juan Catalan    schedule 31.08.2013