NSDateFormatter Не получает правильную строку форматирования

Я получаю неправильную отформатированную строку даты, возвращаемую NSDateFormatter. Вот мой код:

NSDateFormatter *aDateFormatter = [[NSDateFormatter alloc] init];
[aDateFormatter setDateFormat:@"dd-MM-yy HH:mm:ss"];
NSString *aFormattedElapsedTime = [aDateFormatter stringFromDate:refDate];

Здесь refDate (объект NSDate) = 1970-01-01 00:36:22 +0000

Вывод, который я получаю: «16 ч: 36 м: 22 с» вместо «00 ч: 36 м: 22 с».

Я делаю что-то не так здесь?


person Abhinav    schedule 19.04.2011    source источник
comment
refDate передается в stringFromDate, поэтому я предполагаю, что это строка. Можете ли вы дать нам точную строку, которую вы используете?   -  person Nick Weaver    schedule 20.04.2011
comment
В каком часовом поясе вы находитесь, вам, вероятно, нужно указать часовой пояс вашего форматтера, похоже, он использует часовой пояс -8, поэтому я предполагаю, что вы живете на западном побережье.   -  person Joe    schedule 20.04.2011
comment
@Джо: Ты прав. Я на западном побережье. Теперь я получаю правильную разницу, если устанавливаю часовой пояс по Гринвичу. Меня смущает то, что мы всегда получаем дату в формате GMT, когда используем метод dateWithTimeIntervalSince1970 NSDate?   -  person Abhinav    schedule 20.04.2011


Ответы (3)


Попробуйте установить часовой пояс. (Смотри мой комментарий выше)

NSDateFormatter *aDateFormatter = [[NSDateFormatter alloc] init];
[aDateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]
[aDateFormatter setDateFormat:@"dd-MM-yy HH:mm:ss"];
NSString *aFormattedElapsedTime = [aDateFormatter stringFromDate:refDate];
person Joe    schedule 19.04.2011

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

[aDateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

Взгляните на NSDateFormatter to NSString?

person Black Frog    schedule 19.04.2011

Если не считать жизни по тихоокеанскому времени, то нет. Добавьте туда смещение своего часового пояса, и вы поймете, почему вы получаете это значение: NSDateFormatter форматирует дату как интерпретируемую по местному времени, а не UTC.

person Jeremy W. Sherman    schedule 19.04.2011