1

This code

NSDateComponents *component = [[NSDateComponents alloc] init];
NSCalendar       *gregorian = [[NSCalendar alloc]   initWithCalendarIdentifier:NSGregorianCalendar];
[component setMonth:1];
[component setYear:2013];
[component setDay:1];
currentMonth = [gregorian dateFromComponents:component];
NSLog(@"Date in MonthView %@ ",currentMonth);

gives to me the following date

Date in MonthView 2012-12-31 23:00:00 +0000

Why? The months range is supposed to go from 0 to 11 ?

4

2 回答 2

5

不,月份从 1 到 12。这可能是因为您的设备/PC 的时区。设置时区,你应该有你期望的日期

[component setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]
于 2013-09-10T13:14:36.327 回答
0

实际上,答案可能取决于您使用的日历(我看到您使用的是公历,但您的用户可能没有)。

了解给定日期组件范围的最安全方法是查询它的日历。另请注意,它可能会有所不同(例如,公历中的最小天数范围是 1-28,而最大天数是 1-31)。

NSRange minimumMonthRange = [yourCalendar minimumRangeOfUnit:NSMonthCalendarUnit];

原始答案

从“日期和时间编程指南”中的示例开始:

[...] 年单位是 2004 年,月单位是 5,日单位是 6(在公历中是 2004 年 5 月 6 日)。

由于飞蛾会去一月、二月、三月、四月、五月……而且他们在五月使用 5,我会说月份的范围是 1 到 12。

于 2013-09-10T13:13:48.797 回答