我执行以下代码段:

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,即我想要任何指定日期的月份的第一个日期。
但这给了我上个月的最后一个日期。

提前致谢。

最佳答案

添加

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

在初始化您的NSCalendar之后。
[NSDate date]将返回UTC时区中的日期,这是自格林威治标准时间2001年1月1日00:00以来的绝对间隔,但是NSCalendar的timeZone设置为默认时区,可能不是UTC。

UTC与UTC是“相同的”,引自维基百科:

10-05 21:08