2013-12-01 2 views
1

Я беру NSDate и вытаскиваю только 2-значное число, представляя день месяца в NSString. Одна из дат вопрос:NSDate Неверный день

2013-11-30 00:00:00 +0000

Я использую:

NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init]; 
[formatter2 setDateFormat:@"dd"]; 
NSString *datefromdate = [formatter2 stringFromDate:articleDate]; 
NSLog(@"Date%@", datefromdate); 
[formatter2 release]; 

но журнал возвращается

29 

ответ

8

Вы, вероятно, в отрицательной временной зоне, т.е. GMT минус-то. Вот почему 2013-11-30 00:00:00 +0000 GMT на 29-й день, когда вы заходите в систему. Установите форматтер на GMT, и все будет в порядке.

1

Установите часовой пояс, который вы хотите использовать формат даты. 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 
Смежные вопросы