OC 基础第七讲 : NSDate,类的扩展与延展(Extension)

本文详细介绍了Cocoa中的NSDate类及其使用方法,包括如何获取不同地区的时间、计算时间间隔及利用NSDateFormatter进行NSDate与NSString之间的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NSDate :

NSDateCocoa中用于处理日期和时间的基础类,封装了某一给定的时刻


         */

       //北京是东八区,与0时区相差八个小时(一个时区就是一个小时)

   

//获取系统当前时间,不过获取的时间是格林尼治标准时间,也就是0时区的时间和日期

//        NSDate *nowdate = [NSDate date];

//        NSLog(@"nowdate = %@",nowdate);

        


 NSTimeInterval是一个用typedef定义的一个新的double类型的别名,用来表示以秒为单位的时间间隔


//获取系统当前中国时间


NSDate *china = [[NSDatealloc]initWithTimeIntervalSinceNow:8*60*60];

        NSLog(@"china = %@",china);



//用负数日期会自动倒退,

        NSDate *USA = [[NSDatealloc]initWithTimeIntervalSinceNow:-8 * 60 * 60];

        NSLog(@"USA = %@",USA);

//输出时间比当前北京时间少16小时(-8和8之间差16小时)


//求两个时间的差
//明天

                NSDate *mt = [[NSDatealloc]initWithTimeIntervalSinceNow:24*60*60];

                NSLog(@"mt = %@",mt);

        

//昨天

        NSDate *zt = [[NSDatealloc]initWithTimeIntervalSinceNow:-24*60*60];

                NSLog(@"zt = %@",zt);

        

  //求差值      

        NSTimeInterval time = [mttimeIntervalSinceDate:zt];


//输出秒的差值   

        NSLog(@"%f",time);


     //把差值由秒转化为小时输出   //输出的差值是47小时

        NSInteger xiaoshicha = time/(60*60);

        NSLog(@"xiaoshicha = %lu",xiaoshicha);

     

//随机创建一个时间

                NSDate * suiji = [NSDatedateWithTimeIntervalSinceNow:arc4random()%(3600*24)];

                NSLog(@"suiji = %@",suiji);



 //距离1970-01-01 00:00:00 +0000(这里加多少,输出的便是距1970-01-01 00:00:00多少秒之后的时间)

        NSDate *date1 = [[NSDatealloc]initWithTimeIntervalSince1970:0];

        NSLog(@"date1 = %@",date1);


//像60*60,24*60*60这些可以用宏定义

 //计算指定日期多少秒之后的日期

        NSDate *date2 = [NSDatedateWithTimeInterval:61*24*60*60
sinceDate:zt];//此处zt为上面昨天的意思

        NSLog(@"date2 = %@",date2);



    /************ NSDateFormatter ************

/*

         NSDateFormatteriOS中的日期格式类,功能是实现NSDateNSString的互转

        常见的格式化字符串有以下一些:y(),M(年份中的月),d(月份中天数),H(一天中的小时数0~23,h am/pm1~12,m(小时中的分钟数),s(分钟的秒)

         */



 //字符串NSString转化为NSDate

        //将字符串@“20140501 102318转换为NSDate对象。

        NSDateFormatter *a = [[NSDateFormatteralloc]init];

        [a setDateFormat:@"yyyy-MM-dd  HH:mm:ss"];

        NSString *b =@"2014-05-01 10:23:18";

        NSDate *c = [adateFromString:b];

       NSLog(@"%@",c);//转出来是格林尼治时间





 //nsdate日期类型装换成一个nsstring类型的日期

//转化的是当前北京时间

//        NSDateFormatter *formatte=[[NSDateFormatter alloc]init];

//       

//        [formatte setDateFormat:@"dd-MM-yyyy hh:mm:ss"];

// 

//        NSTimeZone *timezone=[NSTimeZone timeZoneWithName:@"Asia/Shanghai"];

//        [formatte setTimeZone:timezone];

//        //nsdate日期类型装换成一个nsstring类型的日期

//        NSString *nowtimestr=[formatte stringFromDate:[NSDate date]];

//        NSLog(@"nowtimestr = %@",nowtimestr);



//类的扩展:

/*

         Category也叫分类或类目

         作用是为看不到源代码 的类添加方法

         通过Category添加的方法会成为原类的一部分,从而达到扩展一个类的功能


//通过类目给数组添加打印方法,直接输出中文汉字

        NSArray *lovepeople = [NSArrayarrayWithObjects:@"那个谁",@"那个那个",@"那个是哪个",@"就是那个啊",@"柯南",@"小兰",nil];

        

        NSLog(@"lovepeople = %@",lovepeople);


  开始定义类目




类目的.m文件里:

(.h里不需要写就可以)


这样就可以把字符串里的汉字输出(之前输出的是 OC的码)


延展和协议:

 /**************    定义Extension(延展)     ***************/

        

/*        Extension 的主要作用是 管理类的私有方法

         面向对象编程也叫面向接口编程

         在设计一个类的时候,有些方法需要对外公开(我们称为接口),有些方法仅仅内部使用(比如,是某个方法的一个小步骤)

           Extension的功能是 帮我们去管理  这些内部使用的方法(私有方法)

  */

        people *my = [[peoplealloc]init];

        [my hello];

        

    /*        ExtensionCategory的区别:

            1,作用:

           类目是为没有源代码的类扩展方法

           延展的作用是管理类的私有方法

            2,格式上

            类目需要定义一个新的.h .m

           延展可以直接写到现有类的.m文件中

   */

    

    

    /*****************        protocol(协议)       *********************/

    

        

        LittleFang *litlefa = [[LittleFangalloc]init];

        

        Me *qiao = [[Mealloc]init];

        //设置代理 girlfriend是遵循mackGirlFriend协议的一个对象,把litlefa赋值给等号左边的girlFriend对象,表明litlefa成了makeGirlFriend代理,也就是说litlefa遵循了mackGirlFriend协议。

        qiao.girlFriend = litlefa;

        [qiao hungry];

        [qiao washcloth];

        [qiao facebeautiful];

        [qiao sometimeangry];

        

    






     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值