時間NSDate分類整理

以前新工作在做郵箱app項目,里面新做了一個日程模塊,用了很多日期出來分類,有很多對日期特殊處理.這里貢獻出來.日期處理特別需要處理的是盡量用系統(tǒng)的類,不要轉(zhuǎn)成日期字符串再比較,日期轉(zhuǎn)字符串特別耗費性能.

//是否是一周內(nèi)的時間 7天內(nèi)
- (BOOL)isWeak{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *cmps = [calendar components:NSCalendarUnitWeekdayOrdinal fromDate:self toDate:[NSDate date] options:0];
    return  cmps.weekdayOrdinal == 0;
}

//上下午時間顯示 上午9:00
- (NSString *)currentHalfDay{
    NSDateFormatter *format = [[NSDateFormatter alloc] init];
    format.AMSymbol =  @"上午"; 
    format.PMSymbol = @"下午";
    format.dateFormat = @"ah:mm";
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];//zh_CN  en_US_POSIX
    [format setLocale:locale];
    NSString *timeStr = [format stringFromDate:self];
    return timeStr;
}

//一天時間取00:00
- (NSDate *)zeroOfDate
{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    return [calendar startOfDayForDate:self];
}

// 將秒刻度清零
- (NSDate *)dateWithZeroSeconds
{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute;
    NSDateComponents *components = [calendar components:unit fromDate:self];
    NSDate *date = [calendar dateFromComponents:components];
    
    return date;
}

//星期幾
- (NSString *)getWeakDay:(NSDate *)date{
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.dateFormat = @"EEE";
    return [fmt stringFromDate:self];
}

 //計算天數(shù)差時候,比如 今23.59 和明天 01:00算差一天,要按當(dāng)?shù)貢r間計算, 這樣就得處理由于時區(qū)差導(dǎo)致的問題
- (NSString *)differentDayWithNow
{
一個月內(nèi),判斷本地化天數(shù)差可以這樣
    //本地時間天數(shù)判斷差幾天
     NSCalendar *calendar =  [NSCalendar currentCalendar];
      int unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay ;
      NSString *days = @""; //本地化天數(shù)差

      NSDateComponents *selfCmps = [calendar components:unit fromDate:self];
      NSDateComponents *nowCmps = [calendar components:unit fromDate:[NSDate date]];
     days =  [NSString stringWithFormat:@"%ld",labs(selfCmps.day - nowCmps.day)];

/*  大于一個月,后上面方法就不適用了,得用下面的方法
      NSDateComponents *cmps =  [calendar components:NSCalendarUnitDay fromDate:self toDate:[NSDate date] options:0];
      NSDateFormatter *format = [[NSDateFormatter alloc] init];
      format.dateFormat = @"HH";
      NSString *timeStr = [format stringFromDate:self];
      NSTimeInterval timeZoneOffset = [[NSTimeZone defaultTimeZone] secondsFromGMT];

       if ([timeStr intValue] <= timeZoneOffset/(60*60)) {
            days =  [NSString stringWithFormat:@"%ld",labs(cmps.day) + 1];
        }else{
            days =  [NSString stringWithFormat:@"%ld",labs(cmps.day)];
         }
*/
}


// 判斷是否是同一天
- (BOOL)isSameDay:(NSDate *)date
{
    NSCalendar *calendar =  [NSCalendar currentCalendar];
    int unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay ;
    NSDateComponents *selfCmps = [calendar components:unit fromDate:self];
    NSDateComponents *theCmps = [calendar components:unit fromDate:date];
    
    return
    (selfCmps.year == theCmps.year) &&
    (selfCmps.month == theCmps.month) &&
    (selfCmps.day == theCmps.day);

}

//是否是今年
- (BOOL)isInThisYear{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    BOOL isInThisYear = [calendar isDate:self equalToDate:[NSDate date] toUnitGranularity:(NSCalendarUnitYear)];
    return  isInThisYear;
}


//天數(shù)時間差
- (NSString *)differentDayFromStartDate:(NSDate *)startDate
{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    int unit = NSCalendarUnitDay ;
    NSDateComponents *cmps =  [calendar components:unit fromDate:self toDate:startDate options:0];
    
    NSString *dateDiff = @"";
    if (cmps.day < 0) { //self時間在startDate時間以后幾天
        dateDiff =  [NSString stringWithFormat:@"%ld",labs(cmps.day)];
        
    }else if(cmps.day == 0){
        dateDiff = @"0";
    }else{//self時間在startDate時間之前幾天
        dateDiff =  [NSString stringWithFormat:@"%ld",(long)-(cmps.day)];
    }
    
    return dateDiff;
}

//小時時間差
- (NSString *)differentHourFromStartDate:(NSDate *)startDate
{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    int unit = NSCalendarUnitHour ;
    NSDateComponents *cmps = [calendar components:unit fromDate:self toDate:startDate options:0];
    NSString *dateDiff = @"";
    
    if (cmps.hour < 0) { //結(jié)束時間在開始時間以后
        dateDiff =  [NSString stringWithFormat:@"%ld",labs(cmps.hour)];
        
    }else if(cmps.hour == 0){
        dateDiff = @"0";
    }else{
        dateDiff =  [NSString stringWithFormat:@"%ld",(long)-(cmps.hour)];
    }
    
    return dateDiff;
}

//分鐘時間差    isremainder = yes 求余數(shù) %60
- (NSString *)differentMinFromStartDate:(NSDate *)startDate isRemainder:(BOOL)isRemainder{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    int unit = NSCalendarUnitMinute ;
    NSDateComponents *cmps = [calendar components:unit fromDate:self toDate:startDate options:0];
    NSString *dateDiff = @"";
    NSInteger mins = labs(cmps.minute);
    if (isRemainder == YES) {
        mins = labs(cmps.minute) % 60;
    }
    if (cmps.minute < 0) { //結(jié)束時間在開始時間以后
        dateDiff =  [NSString stringWithFormat:@"%ld",(long)mins];
        
    }else if(cmps.minute == 0){
        dateDiff = @"0";
    }else{
        dateDiff =  [NSString stringWithFormat:@"%ld",(long)-mins];
    }
    return dateDiff;
}




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容