Look at this code:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"YYYY-MM-dd";
formatter.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
NSString *dateString = [formatter stringFromDate:date];
Log:
Printing description of date:
2017-12-31 11:04:07 +0000
Printing description of dateString:
2018-12-31
How did I get 2018???
BTW, this code works perfectly for every other date. It only behaves weird on 2017-12-31...
UPDATE:
Trying to use system time zone, as suggested in comment:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"YYYY-MM-dd";
formatter.timeZone = [NSTimeZone systemTimeZone];
NSString *dateString = [formatter stringFromDate:date];
Log:
Printing description of date:
2017-12-31 11:27:04 +0000
Printing description of dateString:
2018-12-31