NSDate формат и значение странного поведения - PullRequest
0 голосов
/ 01 апреля 2011

У меня есть следующий код:

NSDateFormatter * df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    [df setTimeZone:[NSTimeZone systemTimeZone]];
    [df setFormatterBehavior:NSDateFormatterBehaviorDefault];

myres.start_date = [df dateFromString:[NSString stringWithFormat:@"%@ %@", [self.data objectForKey:@"date"], [self.data objectForKey:@"start_time"]]];
    NSLog(@"Start date is %@", [NSString stringWithFormat:@"%@ %@", [self.data objectForKey:@"date"], [self.data objectForKey:@"start_time"]]);
    NSLog(@"Start date from NSDate is %@", myres.start_date);
    myres.end_date = [df dateFromString:[NSString stringWithFormat:@"%@ %@", [self.data objectForKey:@"date"], [self.data objectForKey:@"end_time"]]];
    NSLog(@"End date is %@", [NSString stringWithFormat:@"%@ %@", [self.data objectForKey:@"date"], [self.data objectForKey:@"end_time"]]);
    NSLog(@"End date from NSDate is %@", myres.end_date);

и результат, который я получаю:

Start date is 2011-03-31 9:00:00
Start date from NSDate is 2011-03-31 16:00:00 +0000
End date is 2011-03-31 10:00:00
End date from NSDate is 2011-03-31 17:00:00 +0000

почему результат отличается? Мне бы хотелось, чтобы при вызове myres.start_date description я получал те же данные, что и строка.

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

Результат отличается, потому что вы печатаете свои NSDate экземпляры, используя общий метод description, который не соответствует ожидаемому выходному формату.

Если вы использовали [df stringFromDate:myres.start_date], вы должны получить тот же вывод.

Имейте в виду, что NSDate хранит представление времени , и существует множество способов печати времени, а description способ печати времени фиксирован.

Единственный способ заставить description из NSDate вернуть строку в нужном формате - переопределить ее с категорией или использовать подкласс.

Похоже, у вас есть фундаментальное недопонимание того, как хранится и отображается время: ваш NSDate хранит время, проанализированное NSDateFormatter, и фактически возвращает те же самые данные в своем description метод. Он просто отображает в другой форме.

0 голосов
/ 01 апреля 2011

Форматер даты учитывает часовой пояс.Когда вы используете дату напрямую, вы просто получаете ее описание, которое, по-видимому, является зулусским временем.

...