Iphone 使用NSCalendar检索月份的第一天

Iphone 使用NSCalendar检索月份的第一天,iphone,objective-c,nsdate,nscalendar,Iphone,Objective C,Nsdate,Nscalendar,我执行以下代码片段: NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *comp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]]; [comp setDa

我执行以下代码片段:

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

提前感谢。

添加

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

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

UTC与UTC“相同”,这是维基百科的一句话:

在临时使用中,当一个 第二点并不重要,格林威治 可以考虑平均时间(GMT) 相当于UTC或UT1。说“GMT” 通常在以下情况下表示UTC或UT1: 用于非正式或非正式场合 上下文。在技术上下文中,使用 避免使用“GMT”;明确的 术语“UTC”或“UT1”是 首选[3]


[NSDate date]的值是多少?我也认为它是时区的东西。但我也尝试设置两个不同的时区值:1。TimeZoneWithabRevision:虽然它可以工作,但如果应用程序在美国运行,它会带来问题。我正在印度(亚洲)2开发代码。systemTimeZone:给出日期为2011年4月30日。您必须使用UTC,请查看我的答案。问题非常类似于:谢谢。它起作用了。但我没有得到2分1。为什么我设置[gregorian setTimeZone:[NSTimeZone systemTimeZone]]时它不起作用;2.在应用中使用NSDate和NSCalendar时应考虑哪些要点,以避免再次遇到此类问题。