NSCalendar扫盲

一、NSCalendar

NSCalendar可以很方便的用来表示日期,获取日期的各种信息,包括年、月、日,时分秒。可以很方便的计算两个日期之前的关系。也可以很方便的根据一个日期获取另一个日期。
NSCalendar中有一个重要的概念NSCalendarUnit,这是一个位枚举,意味着作为参数可以采用位运算的方式传参。

typedef NS_OPTIONS(NSUInteger, NSCalendarUnit) {
        // 公元前、公元后
        NSCalendarUnitEra                = kCFCalendarUnitEra,
        // 获取年、月、日
        NSCalendarUnitYear               = kCFCalendarUnitYear,
        NSCalendarUnitMonth              = kCFCalendarUnitMonth,
        NSCalendarUnitDay                = kCFCalendarUnitDay,
        // 获取时、分、秒
        NSCalendarUnitHour               = kCFCalendarUnitHour,
        NSCalendarUnitMinute             = kCFCalendarUnitMinute,
        NSCalendarUnitSecond             = kCFCalendarUnitSecond,
        // 获取周几  周日为1 、周1为2
        NSCalendarUnitWeekday            = kCFCalendarUnitWeekday,
        // 获取本周是本月的第几周,7天为1个单位
        NSCalendarUnitWeekdayOrdinal     = kCFCalendarUnitWeekdayOrdinal,
        // 获取刻钟,15分钟为1刻钟
        NSCalendarUnitQuarter            API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)) = kCFCalendarUnitQuarter,
        // 本月第几周
        NSCalendarUnitWeekOfMonth        API_AVAILABLE(macos(10.7), ios(5.0), watchos(2.0), tvos(9.0)) = kCFCalendarUnitWeekOfMonth,
        // 本年第几周
        NSCalendarUnitWeekOfYear         API_AVAILABLE(macos(10.7), ios(5.0), watchos(2.0), tvos(9.0)) = kCFCalendarUnitWeekOfYear,
        NSCalendarUnitYearForWeekOfYear  API_AVAILABLE(macos(10.7), ios(5.0), watchos(2.0), tvos(9.0)) = kCFCalendarUnitYearForWeekOfYear,
        // 纳秒
        NSCalendarUnitNanosecond         API_AVAILABLE(macos(10.7), ios(5.0), watchos(2.0), tvos(9.0)) = (1 << 15),
        NSCalendarUnitCalendar           API_AVAILABLE(macos(10.7), ios(4.0), watchos(2.0), tvos(9.0)) = (1 << 20),
        NSCalendarUnitTimeZone           API_AVAILABLE(macos(10.7), ios(4.0), watchos(2.0), tvos(9.0)) = (1 << 21),
}

要使用NSCalendar,离不开NSDate。那么我们看看他们之间的常用用法

二、常用用法

  • NSCalendar 可以将指定的NSDate 转化成 NSDateComponents,从而来获取date在指定日历中日期信息(年月日时分秒星期等等)

  • NSCalendar 也可以将指定的NSDateComponents 转化成 NSDate

1 使用NSDateComponents获取NSDate 年月日

另外一个比较重要的类是NSDateComponents,上面是通过位参数获取每个单位(年月日)的信息,返回的结构可以看到是一个NSDateComponents,如果我要表示一个日期的信息,构建日期或者进行日期的计算,就少不了NSDateComponents,它可以将日期按照单位的形式封装起来,然后通过NSCalendar的方法进行计算

 NSDateComponents *comps = [NSCalendar.currentCalendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:[NSDate date]];

比如判断两个日期是否同一年或者同一个月或者同一日

 NSDate* lastDate = [NSDate dateWithTimeIntervalSince1970:lastTipTime];
    
    unsigned int unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
    NSDateComponents * lastComps = [[NSCalendar currentCalendar] components:unitFlags fromDate:lastDate];
    NSDateComponents * today = [[NSCalendar currentCalendar] components:unitFlags fromDate:[NSDate date]];
    
    if ([lastComps day] == [today day] && [lastComps month] == [today month])
    {
        return NO;
    }
    return YES;

2 判断给定NSDate日期是否为今天、昨天、明天或者周末

isDateInToday
isDateInYesterday
isDateInTomorrow
isDateInWeekend
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ######先说下需求:选择日期弹出日历(跟途牛,携程等差不多就行。。。行) 初识NSCalendar到写完日历的...
    只是个少年阅读 1,097评论 0 0
  • NSCalendar 对世界上现存的常用的历法进行了封装,既提供了不同历法的时间信息,又支持日历的计算。可以很方便...
    Aliv丶Zz阅读 7,757评论 1 8
  • NSCalendar :日历类,它提供了大部分的日期计算接口,并且允许您在 NSDate 和 NSDateComp...
    搬砖的crystal阅读 1,452评论 0 1
  • 一、NSCalendar NSCalendar可以很方便的用来表示日期,获取日期的各种信息,包括年、月、日,时分秒...
    山有木枝壮阅读 1,771评论 0 1
  • 有一个多月没有更新简书了,因为工作确实比较忙,天天加班。现在APP已经上线,是时侯继续我的写作之旅了。这次项目里面...
    黑暗中的孤影阅读 1,627评论 9 19