Получение 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 ответ:
Добавить
[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]