Получение 1-го числа месяца с использованием NSCalendar - PullRequest
5 голосов
/ 07 мая 2011

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

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 Ответ

10 голосов
/ 07 мая 2011

Добавить

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

после инициализации NSCalendar.

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

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

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

...