NSCalendar掃盲

一、NSCalendar

NSCalendar可以很方便的用來表示日期,獲取日期的各種信息,包括年、月、日,時(shí)分秒??梢院芊奖愕挠?jì)算兩個(gè)日期之前的關(guān)系。也可以很方便的根據(jù)一個(gè)日期獲取另一個(gè)日期。
NSCalendar中有一個(gè)重要的概念NSCalendarUnit,這是一個(gè)位枚舉,意味著作為參數(shù)可以采用位運(yùn)算的方式傳參。

typedef NS_OPTIONS(NSUInteger, NSCalendarUnit) {
        // 公元前、公元后
        NSCalendarUnitEra                = kCFCalendarUnitEra,
        // 獲取年、月、日
        NSCalendarUnitYear               = kCFCalendarUnitYear,
        NSCalendarUnitMonth              = kCFCalendarUnitMonth,
        NSCalendarUnitDay                = kCFCalendarUnitDay,
        // 獲取時(shí)、分、秒
        NSCalendarUnitHour               = kCFCalendarUnitHour,
        NSCalendarUnitMinute             = kCFCalendarUnitMinute,
        NSCalendarUnitSecond             = kCFCalendarUnitSecond,
        // 獲取周幾  周日為1 、周1為2
        NSCalendarUnitWeekday            = kCFCalendarUnitWeekday,
        // 獲取本周是本月的第幾周,7天為1個(gè)單位
        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 轉(zhuǎn)化成 NSDateComponents,從而來獲取date在指定日歷中日期信息(年月日時(shí)分秒星期等等)

  • NSCalendar 也可以將指定的NSDateComponents 轉(zhuǎn)化成 NSDate

1 使用NSDateComponents獲取NSDate 年月日

另外一個(gè)比較重要的類是NSDateComponents,上面是通過位參數(shù)獲取每個(gè)單位(年月日)的信息,返回的結(jié)構(gòu)可以看到是一個(gè)NSDateComponents,如果我要表示一個(gè)日期的信息,構(gòu)建日期或者進(jìn)行日期的計(jì)算,就少不了NSDateComponents,它可以將日期按照單位的形式封裝起來,然后通過NSCalendar的方法進(jìn)行計(jì)算

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

比如判斷兩個(gè)日期是否同一年或者同一個(gè)月或者同一日

 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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ######先說下需求:選擇日期彈出日歷(跟途牛,攜程等差不多就行。。。行) 初識(shí)NSCalendar到寫完日歷的...
    只是個(gè)少年閱讀 1,169評(píng)論 0 0
  • NSCalendar 對(duì)世界上現(xiàn)存的常用的歷法進(jìn)行了封裝,既提供了不同歷法的時(shí)間信息,又支持日歷的計(jì)算。可以很方便...
    Aliv丶Zz閱讀 7,979評(píng)論 1 8
  • NSCalendar :日歷類,它提供了大部分的日期計(jì)算接口,并且允許您在 NSDate 和 NSDateComp...
    搬磚的crystal閱讀 1,626評(píng)論 0 1
  • 一、NSCalendar NSCalendar可以很方便的用來表示日期,獲取日期的各種信息,包括年、月、日,時(shí)分秒...
    山有木枝壯閱讀 1,830評(píng)論 0 1
  • 有一個(gè)多月沒有更新簡(jiǎn)書了,因?yàn)楣ぷ鞔_實(shí)比較忙,天天加班?,F(xiàn)在APP已經(jīng)上線,是時(shí)侯繼續(xù)我的寫作之旅了。這次項(xiàng)目里面...
    黑暗中的孤影閱讀 1,725評(píng)論 9 19

友情鏈接更多精彩內(nèi)容