IOS: problem with NSDate

久未见 提交于 2019-12-10 15:28:40

问题


I have this code:

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);

the result in console is:

date:2011-03-31

why???? if I set "setDay:1" it would be "date:2011-04-01", no?


回答1:


I think this could be a time zone related problem. Be sure to set your time zone on NSDateComponents:

[ components setTimeZone:[ NSTimeZone systemTimeZone ] ] ;



回答2:


Also it depends on the date formatting. My dates were 1 year old for YYYY and I change it to yyyy (lower case) then it was fixed. Be careful about that.




回答3:


Try:

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

From the NSDateComponents docs:

You can configure an instance of NSDateComponents to specify the components of a date and then use the NSCalendar method dateFromComponents: to create the corresponding date object. You can provide as many components as you need (or choose to). When there is incomplete information to compute an absolute time, default values such as 0 and 1 are usually chosen by a calendar, but this is a calendar-specific choice. If you provide inconsistent information, calendar-specific disambiguation is performed (which may involve ignoring one or more of the parameters).



来源:https://stackoverflow.com/questions/5887299/ios-problem-with-nsdate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!