美文网首页iOS技术点
关于 iOS 日历、时间日期

关于 iOS 日历、时间日期

作者: 树根曰 | 来源:发表于2016-12-19 20:12 被阅读0次

    在开发过程中, 会经常碰到时间日期的计算, 今天闲暇之余将笔记中关于日历、时间和日期的记录分享一下(虽然网上有很多)...

    1. 获取当前月份

    //
    #pragma mark 获取当前月份
    + (NSString *)currentMouth {
        
        //获取当前时间日期
        NSDate *currentDate = [NSDate date];
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"YYYY-MM"];
        NSString *dateString = [dateFormatter stringFromDate:currentDate];
        
        return dateString;
    }
    

    2. 获取当前月份的天数

    #pragma mark 获取当前月份的天数
    + (NSInteger)numberOfDaysInCurrentMonth {
        // 初始化日历
        NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
        // 获取系统当前日期
        NSDate *currentDate = [NSDate date];
        // 获取当前日期中当前月中天的范围
        NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:currentDate];
        // 得到当前月中总共有多少天(即范围的长度)
        NSInteger numberOfDaysInCurrentMonth = range.length;
        return numberOfDaysInCurrentMonth;
    }
    

    3. 获取当前月中共有多少周

    #pragma mark 获取当前月中共有多少周
    + (NSInteger)numberOfWeeksInCurrentMonth {
        // 初始化日历
        NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
        // 获取系统当前日期
        NSDate *currentDate = [NSDate date];
        // 获取当前日期中当前月中周的范围
        NSRange range = [calendar rangeOfUnit:NSCalendarUnitWeekOfMonth inUnit:NSCalendarUnitMonth forDate:currentDate];
        // 得到当前月中总共有多少周(即范围的长度)
        NSInteger numberOfWeeksInCurrentMonth = range.length;
        return numberOfWeeksInCurrentMonth;
    }
    

    5. 获取 上个月的天数

    #pragma mark 获取 上个月的天数
    + (NSInteger)getBeforeNumberOfDaysInMonth {
        
        NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
        NSDate *currentDate = [NSDate date];
        NSDateComponents *lastMonthComps = [[NSDateComponents alloc] init];
        //    [lastMonthComps setYear:1]; // year = 1表示1年后的时间 year = -1为1年前的日期,month day 类推
        [lastMonthComps setMonth:-1];
        NSDate *newdate = [calendar dateByAddingComponents:lastMonthComps toDate:currentDate options:0];
        
        // 只要个时间给日历,就会帮你计算出来。这里的时间取当前的时间。
        NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay
                                        inUnit: NSCalendarUnitMonth
                                       forDate:newdate];
        //NSLog(@"当月天数 = %lu",(unsigned long)range.length);
        return range.length;
    }
    

    6. 获取下个月份

    #pragma mark 获取下个月份
    + (NSString *)nextMonth {
        
        NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
        NSDate *currentDate = [NSDate date];
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"YYYY-MM"];
        
        NSDateComponents *lastMonthComps = [[NSDateComponents alloc] init];
        //    [lastMonthComps setYear:1]; // year = 1表示1年后的时间 year = -1为1年前的日期,month day 类推
        [lastMonthComps setMonth:1];
        NSDate *newdate = [calendar dateByAddingComponents:lastMonthComps toDate:currentDate options:0];
        NSString *dateStr = [dateFormatter stringFromDate:newdate];
        //NSLog(@"date str = %@",dateStr);
        
        return dateStr;
    }
    

    7. 获取 下个月的天数

    #pragma mark 获取 下个月的天数
    + (NSInteger)getNextNumberOfDaysInMonth {
        
        NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
        NSDate *currentDate = [NSDate date];
        NSDateComponents *lastMonthComps = [[NSDateComponents alloc] init];
        //    [lastMonthComps setYear:1]; // year = 1表示1年后的时间 year = -1为1年前的日期,month day 类推
        [lastMonthComps setMonth:1];
        NSDate *newdate = [calendar dateByAddingComponents:lastMonthComps toDate:currentDate options:0];
        
        // 只要个时间给日历,就会帮你计算出来。这里的时间取当前的时间。
        NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay
                                       inUnit: NSCalendarUnitMonth
                                      forDate:newdate];
        //NSLog(@"当月天数 = %lu",(unsigned long)range.length);
        return range.length;
    }
    

    8. 获取当前月中第一天在一周内的索引

    #pragma mark 获取当前月中第一天在一周内的索引
    + (NSInteger)indexOfWeekForFirstDayInCurrentMonth {
        // 初始化日历
        NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
        // 获取系统当前日期
        NSDate *currentDate = [NSDate date];
        
        // 获取当前月中的第一天的日期
        NSDateComponents *dateComponents = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday fromDate:currentDate];
        [dateComponents setDay:1];
        NSDate *beginDate = [[NSCalendar currentCalendar] dateFromComponents:dateComponents];
        
        NSDateComponents *beginDateComponents = [calendar components:NSCalendarUnitWeekday fromDate:beginDate];// 当前月中的第一天的日期组件
        
        NSInteger indexOfWeek = ([beginDateComponents weekday] + 6) % 7;// 将格式:日一, ……,五, 六  转换成格式:一二, ……, 六 日,获得索引
        
        return indexOfWeek;
    }
    

    9. 获取当天在当月中的索引(第几天)

    #pragma mark 获取当天在当月中的索引(第几天)
    + (NSInteger)indexOfMonthForTodayInCurrentMonth {
        // 初始化日历
        NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
        // 获取系统当前日期
        NSDate *currentDate = [NSDate date];
        // 获取当前日期的组件
        NSDateComponents *dateComponents = [calendar components:NSCalendarUnitDay fromDate:currentDate];
        NSInteger indexOfMonthForTodayInCurrentMonth = [dateComponents day];
        return indexOfMonthForTodayInCurrentMonth;
    }
    

    最后
    NSCalendar 是一个功能虽然强大,但同时多次初始化可能会造成性能较低,如果在程序从多次使用,可以定义为全局变量,尽量避免过多的初始化

    如果这篇文章对您有些许帮助 请给我点个心哦。

    相关文章

      网友评论

        本文标题:关于 iOS 日历、时间日期

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