美文网首页
NSCalendar扫盲

NSCalendar扫盲

作者: Faner_NG | 来源:发表于2022-06-13 11:26 被阅读0次

一、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扫盲

      本文链接:https://www.haomeiwen.com/subject/bplomrtx.html