OC_07_时间类与类的扩展
来源:互联网 发布:淘宝卖鞋子店铺名字 编辑:程序博客网 时间:2024/06/09 20:15
NSDate
NSDate是Cocoa中用于处理日期和时间的基础类,封装了某一给定的
时刻(含日期,时间,时区)。使用+date方法获取当前时间
例如:NSDate *nowDate = [NSDate date];
注意NSLog(@“%@”,nowDate);无论你是哪个时区的时间,打印时总是打印对应的0时区时间。
//时间类
NSDate *date = [[NSDatealloc]init];
NSDate *d = [NSDatedate];
//用alloc和 + date获取当前时间,无论在哪个时区,总是会打印相应的0时区的时间
NSLog(@"%@", d);//
//获取当前的时区
NSTimeZone *zone = [NSTimeZonesystemTimeZone];
NSLog(@"%@", zone);
//根据对应的时区,获取和0时区相差的秒数
NSInteger seconds = [zonesecondsFromGMTForDate:date];
NSLog(@"%ld",seconds);
NSDate *local1Date = [NSDatedateWithTimeIntervalSinceNow:8 * 3600];
NSDate *localDate = [NSDatedateWithTimeIntervalSinceNow:24*3600 + 8*3600.5];
NSLog(@"%@", localDate);
//sinceNow:为0,还是0时区的时间
//时间间隔是double,也可以传一个小数,以秒为单位
NSTimeInterval
NSTimeInterval(即double类型) 用以表示以秒为单位的时间间隔
可以使用-initWithTimeIntervalSinceNow:方法传入一个NSTimeInterval参数,创建一个NSDate对象
例如:NSDate * tomorrowDate = [[NSDate alloc] initWithTimeIntervalSinceNow:24*60* 60];
NSDate * yesterdayDate = [[NSDate alloc] initWithTimeIntervalSinceNow:-1 * 24*60*60];
取两个时间对象的间隔:NSTimeinterval = [tomorrowDatetimeIntervalSinceDate:yesterdayDate];
//获取明天的时间
NSDate *tomorroewDate = [NSDatedateWithTimeIntervalSinceNow:32 * 3600];
NSLog(@"%@", tomorroewDate);
NSDate *yesterdayDate = [NSDatedateWithTimeIntervalSinceNow:-16 *3600];
//1970年的时间
NSDate *date1970 = [NSDatedateWithTimeIntervalSince1970:0];
NSLog(@"%@", date1970);
NSDate *newDate = [NSDatedateWithTimeIntervalSinceNow:12345];
NSLog(@"%@", newDate);
//两个时间的时间间隔
NSTimeInterval timeNow = [local1Date timeIntervalSinceDate:newDate];
NSLog(@"%g", timeNow);
NSDateFormatter
NSDateFormatter是iOS中的日期格式类,功能是实现NSString和NSDate的互转。
常见的时间格式化字符串有以下一些:y年、M年中的月份 、d月份中的天数、H一天中的小时数(0-23)、h am/pm 中的小时数(1-12)、m小时中的分钟数 、s分钟中的秒数
指定日期格式: NSDateFormatter * formatter = [[NSDateFormatter alloc] init];[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//设置时间的格式,完成NSDate和NSstring的互相转换
//date->字符串的第一种方式
NSDate *date = [NSDatedate];
NSString *dateStr1 = [NSStringstringWithFormat:@"%@",date];
NSString *dateStr2 = [[NSStringalloc]initWithFormat:@"%@",date];
NSLog(@"%@, %@", dateStr1, dateStr2);
//第二种,根据对应的时间格式进行转换
NSDateFormatter *formatter = [[NSDateFormatteralloc]init];
//设置时间格式
// y 年 M 月 d 日 h 小时(12小时制), H 24小时制 m分钟 s秒
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *formatterStr = [formatterstringFromDate:date];
NSLog(@"%@", formatterStr);
// 用formatter来转化的话能自动切换时区,并且能把时差的+0000去掉
//把NSString -> NSDate
NSString *dateString =@"2015-06-7 02:45:00";
//创建一个时间格式,并且格式和字符串内的时间格式完全相同
NSDateFormatter *forMatter1 = [[NSDateFormatteralloc]init];
[forMatter1 setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date1 = [formatterdateFromString:dateString];
NSLog(@"%@",date1);
//转换之后的时间和我们指定的时间差了8个小时,还需要加上8个小时才能正常使用
NSDate转NSString
日期转化为字符串: NSDateFormatter*formatter =[[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
NSString *dateString=[formatter stringFromDate: [NSDate date]];
NSString转NSDate
时间字符串转化为相对应的日期:NSDateFormatter * formatter =[[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString * dateStr = @”2008-08-08 20:08:08”;NSDate * date = [formatter dateFromString:dateStr];
一,类目(Category )
主要作用是为没有源代码的类添加方法。
通过Category添加的方法会成为原类的一部分。从而达到扩展一个类的功能。
类目分为两种,一种是系统的类目,它主要是为了给类的方法进行系统的分类,把相同,相似的方法放在一起,方便寻找。
另外一种是自己写的类目,自己写的类目是对原有的类进行功能的扩展,一般就是把原有类的方法进行重新组合,产生一个新的方法。
创建,cmd+n-> OS X -> Source -> Objective-C File,然后起名, File Type选择Category, Class选择要扩展的类
.h
@interface NSDate (StringToDate)
+ (NSDate *)stringToDate:(NSString *)str;
@end
.m
@implementation NSDate (StringToDate)
+ (NSDate *)stringToDate:(NSString *)str
{
//创建一个日期的格式
NSDateFormatter *formatter = [[NSDateFormatteralloc]init];
//设置日期格式
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date = [formatterdateFromString:str];
NSDate *newDate = [datedateByAddingTimeInterval:8 * 3600];
return newDate;
}
@end
Extension
Extension的主要作用是管理类的“私有”方法。
面向对象编程也叫面向接口编程。
在设计一个类的时候,有些方法需要对外公开(我们称为接口),有些方法仅内部使用(比如:是某个方法的一个小步骤)。
Extension的功能是帮我们去管理这些内部使用的方法(“私有”方法)。
Extension的语法格式和Category很相似
相当于把Category的.h⽂文件挪到了原始类的.m文件中
Extension针对的是自己的类,必须有源代码的类
而类目可以不需要源码对类进行扩展
.m
//类的延展
@interface Student ()
//在延展里写一个属性
@property (nonatomic,copy)NSString *stuSex;
@end
@implementation Student
- (void)test
{
_stuSex =@"5";
}
@end
protocol
Protocol(协议),是iOS开发中常用的技术。
协议是一套标准(一堆方法的声明),只有.h⽂文件。就像一张任务清单(或便利贴),上面写了一堆需要处理的事。清单交给谁,谁就要去完成清单上规定的任务。
接受协议的对象实现协议中定义的方法。即:清单交给谁,谁就要去完成清单上规定的任务。
协议中的方法默认是必须实现的,即@required。关键字@optional 修饰的方法是可选的,可实现也可不实现。
Protocol的核心使用场景是实现delegate设计模式。
delegate(代理)。通俗的讲就是代理商,主要的任务是帮你完成一些任务。
比如:保姆就可以认为是delegate,主要的任务是帮你带孩子、做饭、洗衣服等。
例:结婚,我们先创建girl和boy两个类
girl.h
// 协议第一步:准备一份协议,声明一份协议
@protocol Marry <NSObject>
//协议里方法有两种,一种是必须执行的方法,另一种是可选择的方法
//方法默认是必须实现的
@required
- (void)makeMoney;
@optional
- (void)wash;
@end
//协议在interface上边
@interface Girl : NSObject
//协议的第二步:设置代理人的属性
@property (nonatomic,assign)id<Marry> delegate;
// 两人结婚了
- (void)getMarried;
@end
girl.m
@implementation Girl
- (void)getMarried
{
NSLog(@"他们终于结婚了");
//协议第三步:让代理人去执行方法
[self.delegatemakeMoney];
}
@end
boy.h
#import "Girl.h"
//协议第四步:签订协议
@interface Boy : NSObject<Marry>
@end
boy.m
@implementation Boy
// 协议第六步:实现对应的协议方法
- (void)makeMoney
{
NSLog(@"买买买");
}
@end
main
Girl *g = [[Girl alloc] init];
Boy *b = [[Boyalloc] init];
//协议第五步:设置代理人
g.delegate = b;
//调用结婚的方法
[g getMarried];
协议就是让别人(代理人)去完成自己的方法
1.在girl.h里,声明一份协议
2.在girl.h里,设置代理人属性
3.在girl.m里,设置让代理人执行方法
4.在boy.h里,签订协议
5.在main.m,设置代理人
6.在boy.m 实现协议的方法
总结:
NSDate是iOS中表示日期的类。可以使用NSDateFormatter控制
NSString和NSDate的互转
Category能为没有源代码的类添加方法
Extension为类管理私有方法
Protocol和delegate通常联合使用,是iOS开发中特别常用。
- OC_07_时间类与类的扩展
- 时间类扩展
- JS时间类扩展
- js时间类Date扩展
- InfluxDB-Java 对Point类时间属性的扩展
- 抽象类与接口的扩展功能
- 扩展类的形式与定义
- 抽象类与接口的扩展功能
- HTML5_与类相关的扩展
- iOS - 类扩展与分类的区别
- iOS - 类扩展与分类的区别
- iOS - 类扩展与分类的区别
- iOS类的扩展与继承、概念
- Android的Html类分析与扩展
- 类别与类扩展
- 类扩展与分类
- 与时间相关的类
- 时间的格式化原型扩展
- 复数类中的运算符重载 .
- 第九周项目 00 阅读程序(3)
- 解决 Ubuntu 14.04 登录后屏幕冻结问题
- Android 性能测试实践(三)Cpu
- CAA中指南针操作笔记...
- OC_07_时间类与类的扩展
- WinCE窗体顶部有一行显示不了控件的问题
- 在Mac下安装和使用gcc命令行工具
- dropbox cannot establish secure connection
- 第十一周上机项目2存储班长信息的学生类
- 前几天的中南跳楼学生的遗书......
- 【swift】15-0520 字典
- 5.20 春哥 中枪
- 第十一周 项目1-存储班长信息的学生类(1)