NSDate

目录:
1、时区转换
2、日期格式转换
3、时间格式转换
4、计算今天开始7天内日期、星期(今天,01-13|星期六,01-14|...共7天,使用方法5、6、7、8)
5、日期转换成字符串
6、字符串转换成日期
7、获取当月的天数
8、获取指定的日期是星期几
9、获取指定日期的年,月,日,星期,时,分,秒信息

1.时区转换(国际时间转换成本地时区时间)

//转换时区 输入时间 输出+8时间
+(NSDate *)convertDateToLocalTime:(NSDate *)forDate
{
    
    NSTimeZone *nowTimeZone = [NSTimeZone localTimeZone];
    
    int timeOffset = [nowTimeZone secondsFromGMTForDate:forDate];
    
    NSDate *newDate = [forDate dateByAddingTimeInterval:timeOffset];
    
    return newDate;
}

2.日期格式转换(把20020912变成2002-09-12)

+ (NSString *)dateFormat:(NSString *)sourceString
{
    if ([sourceString length] < 8) 
    {
        return @"";
    }

    NSString *timeString = sourceString;
    NSRange yearRange = NSMakeRange(0, 4);
    NSString *yearString = [timeString substringWithRange:yearRange];
    NSRange monthRange = NSMakeRange(4, 2);
    NSString *monthString = [timeString substringWithRange:monthRange];
    NSRange dayRange = NSMakeRange(6, 2);
    NSString *dayString = [timeString substringWithRange:dayRange];
    
    return [NSString stringWithFormat:@"%@-%@-%@",yearString,monthString,dayString];
}

3、时间格式转换(把160718变成16:07:18)

+ (NSString *)timeFormat:(NSString *)sourceString
{
    if ([sourceString length] < 6) 
    {
        return sourceString;
    }

    NSString *timeString = sourceString;

    NSRange hourRange = NSMakeRange(0, 2);
    NSString *hourString = [timeString substringWithRange:hourRange];

    NSRange minuteRange = NSMakeRange(2, 2);
    NSString *minuteString = [timeString substringWithRange:minuteRange];

    NSRange secondRange = NSMakeRange(4, 2);
    NSString *secondString = [timeString substringWithRange:secondRange];
    
    return [NSString stringWithFormat:@"%@:%@:%@",hourString,minuteString,secondString];
}

4.计算7天内日期、星期,并按格式返回

//自定义方法
- (void)showDateViewWithMaxCount:(NSInteger)maxCount block:(void (^)(NSArray *))callBack
{
    //日历初始化
    self.myCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSMutableArray *dateMtbArr = [NSMutableArray array];
    NSDate *currentDate = [NSDate date];
    
    //  __今天____01-05
    NSString *curDateStr = [self dateToStringWithDate:currentDate];
    NSString *curMdStr = [[self dateToStringWithDate:currentDate] substringFromIndex:5];
    curMdStr = [curMdStr stringByReplacingOccurrencesOfString:@"/" withString:@"-"];
    NSString *curStr = [NSString stringWithFormat:@"  今天    %@",curMdStr];
    [dateMtbArr addObject:@{@"showStr":curStr,
                            @"dateStr":curDateStr}];
    
    //计算本月天数是否够用
    NSInteger daysInMonth = [self getNumberOfDaysInMonthWithDate:currentDate];
    
    //本月要取天数
    NSInteger thisMonthDays = daysInMonth - [curDateStr substringFromIndex:7].integerValue;
    thisMonthDays = thisMonthDays >= maxCount - 1 ? maxCount - 1 : thisMonthDays;
    
    for (int i = 0 ; i < thisMonthDays; i ++)
    {
        //构造下一天字符串(_01-05__星期日)
        NSTimeInterval oneDay = 24 * 60 * 60;
        NSDate *nextDate = [NSDate dateWithTimeIntervalSinceNow:oneDay * (i + 1)];
        NSString *dateStr = [self dateToStringWithDate:nextDate];
        
        NSString *mdStr = [dateStr substringFromIndex:5];// 01/05
        mdStr = [mdStr stringByReplacingOccurrencesOfString:@"/" withString:@"-"];// 01-05
        NSString *weekStr = [self getweekDayWithDate:nextDate];// 星期日
        NSString *nextStr = [NSString stringWithFormat:@"%@  %@",weekStr,mdStr];
        
        [dateMtbArr addObject:@{@"showStr":nextStr,
                                @"dateStr":dateStr}];
    }
    
    //下月要取天数
    if (thisMonthDays != maxCount - 1)
    {
        NSInteger nextMonthDays = maxCount - 1 - thisMonthDays;
        
        NSString *curYear = [curDateStr substringToIndex:4];
        NSString *curMonth = [curDateStr substringWithRange:NSMakeRange(5, 2)];
        NSString *nextYear = @"";
        NSString *nextMonth = @"";
        
        if (curMonth.integerValue == 12)
        {
            nextMonth = @"01";//改成01月   年+1
            nextYear = [NSString stringWithFormat:@"%d",curYear.intValue + 1];
        }
        else
        {
            nextMonth = [NSString stringWithFormat:@"%d",curMonth.intValue + 1];
            nextYear = curYear;
        }
        
        for (int i = 0; i < nextMonthDays; i ++)
        {
            NSString *dateStr = [NSString stringWithFormat:@"%@/%@/%d",nextYear,nextMonth,i + 1];
            NSDate *nextDate = [self stringToDateWithString:dateStr];
            
            NSString *mdStr = [dateStr substringFromIndex:5];// 01/05
            mdStr = [mdStr stringByReplacingOccurrencesOfString:@"/" withString:@"-"];// 01-05
            NSString *weekStr = [self getweekDayWithDate:nextDate];// 星期日
            NSString *nextStr = [NSString stringWithFormat:@"%@  %@",weekStr,mdStr];
            
            [dateMtbArr addObject:@{@"showStr":nextStr,
                                    @"dateStr":dateStr}];
        }
    }
    
    callBack([NSArray arrayWithArray:dateMtbArr]);
}

5、日期转换成字符串

- (NSString *)dateToStringWithDate:(NSDate *)date
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy/MM/dd"]; //只获取年月日的数据
    return [formatter stringFromDate:date];
}

6、 字符串转换成日期

- (NSDate *)stringToDateWithString:(NSString *)string
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy/MM/dd"]; // 年/月/日
    return [formatter dateFromString:string];
}

7、 获取当月的天数

- (NSInteger)getNumberOfDaysInMonthWithDate:(NSDate *)date
{
    NSRange range = [self.myCalendar rangeOfUnit:NSDayCalendarUnit
                                        inUnit: NSMonthCalendarUnit
                                       forDate:date];
    return range.length;
}

8.获取指定的日期是星期几

/**
 获取指定的日期是星期几
 @param date 日期
 @return 星期几
 */
- (NSString *)getweekDayWithDate:(NSDate *)date
{
    NSDateComponents *comps = [self.myCalendar components:NSWeekdayCalendarUnit fromDate:date];
    
    NSString *dateStr;
    
    // 1 是周日,2是周一 3.以此类推
    switch ([comps weekday])
    {
        case 1:
            dateStr = @"星期日";
            break;
        case 2:
            dateStr = @"星期一";
            break;
        case 3:
            dateStr = @"星期二";
            break;
        case 4:
            dateStr = @"星期三";
            break;
        case 5:
            dateStr = @"星期四";
            break;
        case 6:
            dateStr = @"星期五";
            break;
        case 7:
            dateStr = @"星期六";
            break;
        default:
            break;
    }
    
    return dateStr;
}

9、 获取指定日期的年,月,日,星期,时,分,秒信息

/**
 *    NSCalendarUnitWeekday
 *     获取指定日期的年,月,日,星期,时,分,秒信息
 */
- (void) getDateInfo
{
    NSDate * date  = [NSDate date];
    NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; // 指定日历的算法 NSCalendarIdentifierGregorian,NSGregorianCalendar
    // NSDateComponent 可以获得日期的详细信息,即日期的组成
    NSDateComponents *comps = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:date];

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

推荐阅读更多精彩内容