iOS的计算获取本月前几个或者后几个月份

1.月份获取

月份的获取我相信很多人都弄过,获取本月的月份

    NSDate *newDate = [NSDate data];//这个就是本月的月份的信息

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM"];
    NSString *newStr = [formatter stringFromDate:newDate];//获取到的就是月份的字符串形式

2.那如果获取本月之前几个月的月份呢,有人说很简单呀,确实也是很简单的。

首先我们看看一个的例子

    NSTimeZone* timeZone = [NSTimeZone timeZoneForSecondsFromGMT:8];//设置时区  这个很重要不设置的话默认就是美国的时间,会存在八个小时的误差
    [formatter setTimeZone:timeZone];
    NSDate *fromDate = [formatter dateFromString:fromDateStr];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSTimeInterval time1970 = [fromDate timeIntervalSince1970];//这个是计算1970年开始到现在的时间单位是s
    NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:dateTime];
    NSInteger  CuurentNumberOffDaysInMonth = range.length;//计算本月的天数

    for (NSInteger i= 0 ; i<numberMonth; i++) {
        NSDate *dateTime = [NSDate dateWithTimeIntervalSince1970:time1970+(86400*numberOffDaysInMonth)];
        [formatter stringFromDate:dateTime];
        NSString *string = [NSString stringWithFormat:@"%@",dateTime];
        LYTimeModel *model = [[LYTimeModel alloc] init];
        model.year = [string substringToIndex:4];
        model.month = [string substringWithRange:NSMakeRange(5, 2)];
        [tempDateS addObject:model];
    }

3.在上述代码中每个月的天数一直都跟本月的天数一样,这里就可以看出来了吧,每个月的天数怎么可能一样呢,下面就是我优化的部分。

    NSTimeZone* timeZone = [NSTimeZone timeZoneForSecondsFromGMT:8];//设置时区
    [formatter setTimeZone:timeZone];
    NSDate *fromDate = [formatter dateFromString:fromDateStr];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSTimeInterval time1970 = [fromDate timeIntervalSince1970];

    NSUInteger numberOffDaysInMonth = 0;
    //计算当月的所有的天数
    for (NSInteger i= 0 ; i<numberMonth; i++) {
        NSDate *dateTime = [NSDate dateWithTimeIntervalSince1970:time1970+(86400*numberOffDaysInMonth)];
        [formatter stringFromDate:dateTime];
        NSString *string = [NSString stringWithFormat:@"%@",dateTime];
        LYTimeModel *model = [[LYTimeModel alloc] init];
        model.year = [string substringToIndex:4];
        model.month = [string substringWithRange:NSMakeRange(5, 2)];
        [tempDateS addObject:model];
        //计算当月的所有的天数
        NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:dateTime];
        NSInteger  CuurentNumberOffDaysInMonth = range.length;
        numberOffDaysInMonth += CuurentNumberOffDaysInMonth;

    }

每一个月单独计算当月的月份的天数这样一来就可以准确计算出前几个后几个月份的的年月

4.最后送上另外一个计算某一个时间到另一个时间的年月日

这里写图片描述

说一个额外的小问题,跟本题无关,也是我自己使用时遇到的


        NSString *path = [[NSBundle mainBundle] pathForResource:@"1080x1920.mp4" ofType:nil];
        NSURL *url = [NSURL fileURLWithPath:path];

//        NSURL *url = [NSURL URLWithString:@"http://v1.mukewang.com/a45016f4-08d6-4277-abe6-bcfd5244c201/L.mp4"];

        // 2.创建AVPlayerItem
        AVPlayerItem *item = [AVPlayerItem playerItemWithURL:url];

        // 3.创建AVPlayer
        AVPlayer * player = [AVPlayer playerWithPlayerItem:item];

        // 4.添加AVPlayerLayer
        AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:player];

        layer.frame = self.view.bounds;

        [self.view.layer addSublayer:layer];

        [player play];

上述是一个简单的播放器功能,播放本地的MP4文件,但是你在XCode模拟器上运行这部分代码,断点会断住,

会出现 :
Xcode模拟器得播放本地视频崩溃总是报[AudioHAL_Client] AudioHardware.cpp:666:AudioObjectGetPropertyData: AudioObjectGetPropertyData: no object with given ID 0的问题,找不出问题来,但是在真机就可以正常运行了,没有任何问题,后来查了一下资料,其实太简单了
这里写图片描述
这里不要有断点,是不是很简单。。。。。。,至于原因我猜想的事模拟器还是不是很完美的支持视频播放导致的,只是纯属个人猜想的。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章