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。 如果您提供的信息不一致,则执行日历专用的消歧(可能涉及忽略一个或多个参数)。