我正在尝试创建一个日/月的UIPickerView,没有一年。目标是选择一天/月来列出当天/月发生的历史事件。
[NSCalendar currentCalendar]maximumRangeOfUnit:NSCalendarUnitDay]
将获得任何月份的最大天数,即格里高利历中的31天。我真正想要的是
[calendar maximumRangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarMonth unit:2]
在格里高利历中将于2月返回29。
从我所看到的唯一关闭的东西有一个forDate:这没有用。一个快速的黑客就是将其用于8年范围内的日期(处理非闰年世纪),但这对于具有不同闰年规则的其他日历类型不起作用。
有关如何实现这一目标的任何建议吗?
答案 0 :(得分:1)
NSCalendar
并未直接提供您要求的功能。由于您希望支持其他日历,因此最好的选择是循环使用许多时代/年/月组合,并调用-[NSCalendar rangeOfUnit:inUnit:forDate:]
。八年是不够的,因为(例如)希伯来日历(我相信)是一个19年的周期。
Also note that other calendars (e.g. the Chinese calendar) have more than just the two eras (BCE/CE) of the Gregorian calendar,所以你应该改变时代以及年份和月份。
如果这很昂贵,您可以编写一个命令行程序来执行此操作,并为您嵌入应用程序的表发出源代码。然后,您可以将程序作为预编译构建步骤运行。
如果您对历史事件数据库有适当的访问权限,另一种方法是查找数据库中实际使用的每个日期,并确保您的范围涵盖这些日期。