IOS:NSDate的问题

我有这个代码:

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease]; [components setYear:2011]; [components setDay:1]; [components setMonth:4]; NSCalendar *gregorianCalendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; NSDate *firstDate = [gregorianCalendar dateFromComponents:components]; NSLog(@"date:%@", firstDate); 

在控制台中的结果是:

 date:2011-03-31 

为什么???? 如果我设置“setDay:1”,它会是“date:2011-04-01”,不是?

我认为这可能是一个时区相关的问题。 请务必在NSDateComponents上设置您的时区:

 [ components setTimeZone:[ NSTimeZone systemTimeZone ] ] ; 

也取决于date格式。 我的date是1岁, YYYY ,我改为yyyy (小写),然后它是固定的。 小心一点。

尝试:

  [components setWeekdayOrdinal:1]; // The first day in the month 

从NSDateComponents文档:

您可以configuration一个NSDateComponents实例来指定date的组件,然后使用NSCalendar方法dateFromComponents:来创build相应的date对象。 您可以根据需要提供尽可能多的组件(或select)。 当有不完整的信息来计算绝对时间时,默认值(如0和1)通常由日历select,但这是一个日历特定的select。 如果您提供的信息不一致,则执行日历专用的消歧(可能涉及忽略一个或多个参数)。