init] вернуть дату на час назад?

Когда я звоню

NSDate *now = [[NSDate alloc] init]; 

чтобы получить текущую дату и время, я проверяю это с помощью:

NSLog(@"Date now: %@", now);

выводимая дата - это один час в прошлом.

2010-10-08 12:04:38.227 MiniBf[1326:207] Сейчас: 2010-10-08 11:04:38 GMT

Возможно, мой часовой пояс где-то неправильно установлен?

Спасибо!

Майкл


person Smikey    schedule 08.10.2010    source источник
comment
Вы тестируете на симуляторе или на реальном устройстве? Активно ли летнее время (летнее время)? Пожалуйста, предоставьте больше информации.   -  person AlexVogel    schedule 08.10.2010
comment
Я тестирую это с помощью симулятора. Я не могу нигде в симуляторе отключить переход на летнее время?   -  person Smikey    schedule 08.10.2010


Ответы (4)


Используйте NSDateFormatter для локализации даты:

NSLog(@"%@",[NSDateFormatter localizedStringFromDate:[NSDate date] dateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterShortStyle]); 
person Sander    schedule 08.10.2010
comment
Это действительно показывает правильную дату. Однако дата при инициализации, как указано выше, по-прежнему неверна на час... :o - person Smikey; 11.10.2010
comment
NSDate работает по Гринвичу. Единственный примитивный метод NSDate, timeIntervalSinceReferenceDate, обеспечивает основу для всех остальных методов интерфейса NSDate. Этот метод возвращает значение времени относительно абсолютной контрольной даты — первого момента 1 января 2001 года по Гринвичу. - person Sander; 12.10.2010

Я видел такое поведение на DatePicker, работающем на устройствах iOS 4.1, в то время как на iOS 4.0 и более ранних версиях этого не происходит. Я не могу подтвердить, что это действительно тот же самый баг.

Но я предлагаю вам проверить, связано ли это с признанной Apple ошибкой относительно дат/летнего времени/4.1, запустив этот код на ‹ 4.1. Затем вам нужно будет решить, следует ли взломать исправление для этой конкретной версии/дат или дождаться следующего выпуска SDK, чтобы исправить это и не поддерживать устройства 4.1...

Ошибка, о которой я говорю, я считаю, происходит только при прохождении дат в летний период времени (2010: 28 марта - 31 октября)

person Juan Fran Jimenez    schedule 15.11.2010

Используйте NSDate *now = [дата NSDate];

Я использую это и получаю отличный результат.

person Javal Nanda    schedule 08.10.2010
comment
этот метод использует метод -init, т.е. вы можете прочитать его как [[[NSDate alloc] init] autorelease]; Не должно быть никакой разницы. - person Matthias Bauch; 08.10.2010

Возможно, ваш часовой пояс неверен в вашем симуляторе iPhone. Нажми кнопку домой, зайди в settings.app и поправь ;)

person Sander    schedule 08.10.2010
comment
Не могу нигде в настройках изменить время. Время в строке состояния тоже верное. - person Smikey; 08.10.2010