使用 NSCalendar 一个月中的最大天数
Maximum days in a month with NSCalendar
我正在尝试创建一个 day/month UIPickerView,没有年份。目标是选择一个 day/month 来列出 day/month 上发生的历史事件。
[NSCalendar currentCalendar]maximumRangeOfUnit:NSCalendarUnitDay]
将获取任意月份的最大天数,即公历31天。我真正想要的是
[calendar maximumRangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarMonth unit:2]
公历二月 return 29。
据我所知,唯一关闭的东西有一个 forDate:,这没有用。一个快速的破解方法是将它用于 8 年范围内的日期(以处理非闰年世纪),但这不适用于具有不同闰年规则的其他日历类型。
关于如何实现这一点有什么建议吗?
NSCalendar
不直接提供您要求的功能。既然你想支持其他日历,你最好的选择确实是循环许多 era/year/month 组合,调用 -[NSCalendar rangeOfUnit:inUnit:forDate:]
。八年是不够的,因为(例如)希伯来历是(我相信)一个 19 年的周期。
,所以你应该改变纪元和年月。
如果这很昂贵,您可以编写一个 command-line 程序来执行它并为您嵌入到应用程序中的 table 发出源代码。然后您可以 运行 将程序作为 pre-compilation 构建步骤。
如果您有适当的历史事件数据库访问权限,另一种方法是查找数据库中实际使用的每个日期,并确保您的范围涵盖这些日期。
我正在尝试创建一个 day/month UIPickerView,没有年份。目标是选择一个 day/month 来列出 day/month 上发生的历史事件。
[NSCalendar currentCalendar]maximumRangeOfUnit:NSCalendarUnitDay]
将获取任意月份的最大天数,即公历31天。我真正想要的是
[calendar maximumRangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarMonth unit:2]
公历二月 return 29。
据我所知,唯一关闭的东西有一个 forDate:,这没有用。一个快速的破解方法是将它用于 8 年范围内的日期(以处理非闰年世纪),但这不适用于具有不同闰年规则的其他日历类型。
关于如何实现这一点有什么建议吗?
NSCalendar
不直接提供您要求的功能。既然你想支持其他日历,你最好的选择确实是循环许多 era/year/month 组合,调用 -[NSCalendar rangeOfUnit:inUnit:forDate:]
。八年是不够的,因为(例如)希伯来历是(我相信)一个 19 年的周期。
如果这很昂贵,您可以编写一个 command-line 程序来执行它并为您嵌入到应用程序中的 table 发出源代码。然后您可以 运行 将程序作为 pre-compilation 构建步骤。
如果您有适当的历史事件数据库访问权限,另一种方法是查找数据库中实际使用的每个日期,并确保您的范围涵盖这些日期。