IOS: проблема с NSDate - PullRequest
       21

IOS: проблема с NSDate

4 голосов
/ 04 мая 2011

У меня есть этот код:

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setYear:2011];
[components setDay:1];
[components setMonth:4];
NSCalendar *gregorianCalendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *firstDate = [gregorianCalendar dateFromComponents:components];
NSLog(@"date:%@", firstDate);

результат в консоли:

date:2011-03-31

почему ???? если я установлю "setDay: 1", это будет "дата: 2011-04-01", нет?

Ответы [ 3 ]

2 голосов
/ 04 мая 2011

Я думаю, что это может быть связано с часовым поясом.Обязательно установите часовой пояс для NSDateComponents:

[ components setTimeZone:[ NSTimeZone systemTimeZone ] ] ;
1 голос
/ 20 октября 2012

Также это зависит от формата даты.Мои даты были 1 год для YYYY, и я изменил его на yyyy (нижний регистр), тогда это было исправлено.Будьте осторожны с этим.

0 голосов
/ 04 мая 2011

Попробуйте:

   [components setWeekdayOrdinal:1]; // The first day in the month

Из документации NSDateComponents:

Вы можете настроить экземпляр NSDateComponents, чтобы указать компоненты даты, а затем использовать метод NSCalendar dateFromComponents: для создания соответствующего объекта даты. Вы можете предоставить столько компонентов, сколько вам нужно (или выбрать). Когда есть неполная информация для вычисления абсолютного времени, значения по умолчанию, такие как 0 и 1, обычно выбираются календарем, но это выбор для конкретного календаря. Если вы предоставляете противоречивую информацию, выполняется устранение неоднозначности для конкретного календаря (что может включать игнорирование одного или нескольких параметров).

...