Установите часовой пояс, который вы хотите использовать формат даты. NSDate - это первый момент 1 января 2001 года по Гринвичу и, таким образом, не содержит информации о часовом поясе.
Таким образом, это, по мнению Apple, собирается получить сложнее нуждаясь до пяти классов: NSDateFormatter
, NSDate
, NSCalendar
, NSTimeZone
и, наконец, NSDateComponents
.
Если все, что вы хотите, это день, вы можете использовать NSDateComponents
.
Пример:
NSString *dateString = @"2013-11-30 00:00:00 +0000";
NSDateFormatter *inDateFormatter = [[NSDateFormatter alloc] init];
[inDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
NSDate *date = [inDateFormatter dateFromString:dateString];
NSLog(@"dateFromString: %@", date);
NSTimeZone *timezone = [NSTimeZone timeZoneForSecondsFromGMT:0];
// Using date formatter, result is a string
NSDateFormatter *outDateFormatter = [NSDateFormatter new];
[outDateFormatter setTimeZone:timezone];
[outDateFormatter setDateFormat:@"dd"];
NSString *dayString = [outDateFormatter stringFromDate:date];
NSLog(@"date formatter day: %@", dayString);
// Using date components, result is an integer
NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setTimeZone: timezone];
NSDateComponents *dateComponents = [calendar components:NSDayCalendarUnit fromDate:date];
NSInteger day = [dateComponents day];
NSLog(@"date components day: %i", day);
NSLog выход:
dateFromString: 2013-11-30 00:00:00 +0000
date formatter day: 30
date components day: 30