Почему NSDate из строки на один день меньше?

если я попробую:

NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyyMMdd"];

и

[formatter dateFromString:@"20120423"];

Мой новый объект NSDate будет: 2012 04 22. Почему на один день меньше?

Спасибо

Ответ 1

У вас есть проблемы с часовым поясом, и его можно решить, добавив эту строку кода:

formatter.timeZone = [NSTimeZone timeZoneWithName:@"GMT"];

Ответ 2

Для тех, кто ищет версию swift 3

let formatter        = DateFormatter()
formatter.timezone   = TimeZone(abbreviation: "GMT")
formatter.dateFormat = "yyyyMMdd"
formatter.date(from: "20120423")

Ответ 3

Для одного лайнера с использованием Swift 3

Date.init(dateString: "2014-07-31", format: "yyyy-MM-dd", timeZone: TimeZone.init(abbreviation: "GMT")!)