NSDate возвращает текущую дату.Хотя он может конвертировать в и из строкового формата в разных локалях / часовых поясах, NSDate не имеет внутренней концепции часового пояса.NSDates не привязаны к какому-либо конкретному региону.Если вы и кто-либо еще в мире попросите ваши устройства одновременно [дата NSDate], вы получите равные результаты - не потому, что он всегда возвращается в GMT, а потому, что он не возвращается в зависимости от часового пояса.В Какао дата - это особый момент в истории Земли.То, как вы пишете дату, связано с вашим календарем, вашим часовым поясом и вашей локалью.
Вы не получаете завтрашнюю дату, вы получаете правильную дату, а затем замечаете, что она дает другой день, если выражено вВРЕМЯ ПО ГРИНВИЧУ.Это правильная дата, просто написанная не так, как вы хотели бы.
'description' - это метод, переопределенный из NSObject.Когда вы NSLog объекта, внутренне происходит то, что вызывается метод description и выводится возвращаемая строка.Таким образом, вы должны получить идентичные результаты при ведении журнала object
и [object description]
, так как первый вызывает описание и печатает эту строку, последний вызывает описание, затем вызывает описание полученной строки и печатает ее.NSStrings возвращают себя как результат описания.
Это должно быть поведение по умолчанию, но чтобы получить содержательное описание, попробуйте:
NSLog(@"%@", [[NSDate date] descriptionWithCalendarFormat:nil
timeZone:[NSTimeZone localTimeZone] locale:[NSLocale currentLocale]]);
Если это все еще входит в систему по Гринвичу, тогда ваше устройство считает себябыть в GMT.Я понятия не имею, насколько надежен симулятор в таких вещах.