使用NSCalendar检索月份的第一天

时间:2011-05-07 11:01:53

标签: iphone objective-c nsdate 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 个答案:

答案 0 :(得分:10)

添加

[gregorian setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
初始化NSCalendar后

[NSDate date]将返回UTC时区的日期,以及自2001年1月1日00:00 GMT以来的绝对间隔,但NSCalendar的timeZone设置为默认时区,可能不是UTC。

UTC与UTC“相同”,来自维基百科:

  

在临时使用中,当分数为a   第二个并不重要,格林威治   可以考虑平均时间(GMT)   相当于UTC或UT1。说“GMT”   通常暗示UTC或UT1时   用于非正式或休闲   上下文。在技​​术背景下,用法   避免“GMT”;毫不含糊   术语“UTC”或“UT1”是   优选的。[3]