Получение 1-го числа месяца с помощью NSCalendar


Я выполняю следующий фрагмент кода:

NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]]; 
[comp setDay:1]; 

NSDate *firstDayOfMonthDate = [gregorian dateFromComponents:comp];

Значение firstDayOfMonthDate = 30-4-2011, но исключается 1-5-2011, т. е. я хочу первую дату месяца любой указанной даты. Но это дает мне последнюю дату предыдущего месяца.

Заранее благодарю.

1 5

1 ответ:

Добавить

[gregorian setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];

После инициализации вашего NSCalendar.

[NSDate date] возвращает дату в часовом поясе UTC, а также абсолютный интервал с 1 января 2001 года 00: 00 GMT, но у NSCalendar есть свой часовой пояс, установленный в часовой пояс по умолчанию, который не может быть UTC.

UTC - это" то же самое", что и UTC, цитата из Википедии:

В повседневном использовании, когда доли a вторые не важны, Гринвич Среднее время (GMT) можно рассматривать эквивалент UTC или UT1. Поговорка "ГРИНВИЧ" часто подразумевает либо UTC, либо UT1, когда используется в неофициальной или неформальной контексты. В технических контекстах, использование "GMT" избегается; однозначный терминология " UTC "или" UT1 " является предпочтительный.[3]