最近做项目需要用到日历这个东西,并且项目自定义很大,所以不得不自己写一个日历,所以看了看NSCalendar的API文档。随笔:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 let componentFlags : NSCalendarUnit = .YearCalendarUnit | .MonthCalendarUnit | .DayCalendarUnit | .WeekCalendarUnit | .HourCalendarUnit | .MinuteCalendarUnit | .SecondCalendarUnit | .WeekdayCalendarUnit | .WeekdayOrdinalCalendarUnit | .WeekOfMonthCalendarUnit | .WeekOfYearCalendarUnit | .QuarterCalendarUnit //创建一个差不多算是全部的NSClaendaerUnit对象 2 3 var component = NSCalendar.autoupdatingCurrentCalendar().components(componentFlags, fromDate: NSDate())//解析一个时间,这里默认解析的是 NSDate()也就是当前时间 4 5 component.day = 20 //设置一下 日期 6 7 component.month = 9 //是这一下月份 8 9 var dates = NSCalendar.autoupdatingCurrentCalendar().dateFromComponents(component) //得到设置完成后的日期 也就是 2015 - 9 - 20 10 11 var components = NSCalendar.autoupdatingCurrentCalendar().components(componentFlags, fromDate: dates!) //重新解析 12 13 14 ///以下为解析后的数据///// 15 16 components.year //年 YearCalendarUnit 17 18 components.month //月 MonthCalendarUnit 19 20 components.day //日 DayCalendarUnit 21 22 23 24 components.hour //小时 HourCalendarUnit 24小时制 25 26 components.minute //分钟 MinuteCalendarUnit 27 28 components.second //秒 SecondCalendarUnit 29 30 31 components.weekday //每一周的第几天 WeekdayCalendarUnit 周日为0 周六为7 32 33 components.weekdayOrdinal //每个月的第几周 WeekdayOrdinalCalendarUnit 按天数算的属于第几周,每七天算一周 34 35 components.weekOfMonth //每个月的第几周 WeekOfMonthCalendarUnit 按照日历表查的第几周 36 37 components.weekOfYear //每年的第几周 WeekOfYearCalendarUnit 38 39 components.quarter //季度 QuarterCalendarUnit 0 - 3 40 41 components.leapMonth //是不是闰月
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 初始化方法 2 3 1.init(calendarIdentifier:) Designated Initializer 系统比较想让用户使用的初始化方法 4 5 需要传递一个 Identifier 6 7 /* 8 FOUNDATION_EXPORT NSString * const NSGregorianCalendar; //公历(常用) 9 FOUNDATION_EXPORT NSString * const NSBuddhistCalendar; //佛教日历 10 FOUNDATION_EXPORT NSString * const NSChineseCalendar; //中国农历(常用) 11 FOUNDATION_EXPORT NSString * const NSHebrewCalendar; //希伯来日历 12 FOUNDATION_EXPORT NSString * const NSIslamicCalendar; //伊斯兰历 13 FOUNDATION_EXPORT NSString * const NSIslamicCivilCalendar; //伊斯兰教日历 14 FOUNDATION_EXPORT NSString * const NSJapaneseCalendar; //日本日历(和历,常用) 15 FOUNDATION_EXPORT NSString * const NSRepublicOfChinaCalendar; //中华民国日历(台湾) 16 FOUNDATION_EXPORT NSString * const NSPersianCalendar; //波斯历 17 FOUNDATION_EXPORT NSString * const NSIndianCalendar; //印度日历 18 FOUNDATION_EXPORT NSString * const NSISO8601Calendar; //ISO8601(但是现在还不可用) 19 20 这段是摘抄的…………………………原谅我 http://www.cnblogs.com/CCSSPP/archive/2013/07/11/3183410.html 原文字这里& 21 */ 22 23 24 ……………………https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/#//apple_ref/occ/instm/NSCalendar/setFirstWeekday: 忽然不想写了…………请原谅我,自己去看看吧~ 都很简单的。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 func rangeOfUnit(smaller: NSCalendarUnit, inUnit larger: NSCalendarUnit, forDate date: NSDate) -> NSRange //这个方法使用来获取大的单位里面有几个小的单位的。并且会给与你范围和开始值。比如你想获取当前时间这个月有多少天。那么 small 就穿 .DayCalendarUnit。lager就传递.MonthCalendarUnit 时间的话就传递 NSDate() 2 3 func ordinalityOfUnit(smaller: NSCalendarUnit, inUnit larger: NSCalendarUnit, forDate date: NSDate) -> Int //这个方法和上一个方法很想,但是他获取的不是 有多少个了! 而是在第几个。比如你想知道现在是第几周啊(我说的这个第几周是说 在日历查行数的的那个行数,具体可以看上面代码中的 对于 NSDateConents的解析。)那么 第一个参数就传递 .WeekOfMonthCalendarUnit 第二个就传递 MonthCalendarUnit 第三个还是时间 4 5 func dateFromComponents(comps: NSDateComponents) -> NSDate? //这个方法是根据你解析到的Comp对象变成事件,比如像获取这个月第一天的饿日期,就会用到它 6 7 func component(unit: NSCalendarUnit, fromDate date: NSDate) -> Int //这个方法是获取你传递的方法的某一个属性,比如获取年啊,获取月啊,获取什么的饿…… 8 9 func compareDate(date1: NSDate, toDate date2: NSDate, toUnitGranularity unit: NSCalendarUnit) -> NSComparisonResult //比较两个时间的方法,第一个参数就是第一个事件第二个参数就是第二个时间,之后第三个就是你要比较他们什么呢? 日月年?随便~~~ 之后他会给一个 枚举类型的 返回值,也就是 大~小~和相等 10 11 func isDate(date1: NSDate, equalToDate date2: NSDate, toUnitGranularity unit: NSCalendarUnit) -> Bool //这个方法就是说 第一个事件是不是在某一个属性一样呢~ 比如你要看是不是今天并不在意 小时分钟的话,那么你就第三个参数传递 年月日就可以了~ 12 13 func isDate(date1: NSDate, inSameDayAsDate date2: NSDate) -> Bool ///而这个方法呢,就是差一秒那也是不行的! 14 15 func isDateInToday(date: NSDate) -> Bool //名字也知道……是不是今天? 16 17 func isDateInYesterday(date: NSDate) -> Bool //不想说了……(是不是昨天) 18 19 func isDateInTomorrow(date: NSDate) -> Bool //同上 (是不是明天) 20 21 func isDateInWeekend(date: NSDate) -> Bool //是不是这个星期呢 22 23 func dateByAddingUnit(unit: NSCalendarUnit, value: Int, toDate date: NSDate, options: NSCalendarOptions) -> NSDate?//这个就是处理时间的一个方法。最后一个直接nil就可以的。 https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/#//apple_ref/occ/instm/NSCalendar/components:fromDate:toDate:options: 这里有一个例子哦 24 25 这几个方法已经够我用的了…… 其他的有的看不懂,有的不想说…… 你们有什么想知道的,可以问我哦
过一段时间我会给你们一个传上来一个 Extension 关于这个类的