时间NSDate分类整理

以前新工作在做邮箱app项目,里面新做了一个日程模块,用了很多日期出来分类,有很多对日期特殊处理.这里贡献出来.日期处理特别需要处理的是尽量用系统的类,不要转成日期字符串再比较,日期转字符串特别耗费性能.

//是否是一周内的时间 7天内
- (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];
}

 //计算天数差时候,比如 今23.59 和明天 01:00算差一天,要按当地时间计算, 这样就得处理由于时区差导致的问题
- (NSString *)differentDayWithNow
{
一个月内,判断本地化天数差可以这样
    //本地时间天数判断差几天
     NSCalendar *calendar =  [NSCalendar currentCalendar];
      int unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay ;
      NSString *days = @""; //本地化天数差

      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;
}


//天数时间差
- (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) { //结束时间在开始时间以后
        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 求余数 %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) { //结束时间在开始时间以后
        dateDiff =  [NSString stringWithFormat:@"%ld",(long)mins];
        
    }else if(cmps.minute == 0){
        dateDiff = @"0";
    }else{
        dateDiff =  [NSString stringWithFormat:@"%ld",(long)-mins];
    }
    return dateDiff;
}




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容