1.NSDate:
日期类
NSDate
*date = [
NSDate
date
];
NSLog
(
@"%@"
, date);
//
格式
:
年
-
月
-
日
时
:
分
:
秒
时区
//NSTimeInterval:
时间的计算单位
,
秒
,
实质是
double
//
一分钟以后
NSDate
*date1 = [
NSDate
dateWithTimeIntervalSinceNow
:60];
NSLog
(
@"%@"
, date1);
//
昨天的现在时刻
NSDate
*date2 = [
NSDate
dateWithTimeIntervalSinceNow
:-24 * 60 * 60];
NSLog
(
@"%@"
, date2);
//
明年的现在时刻
NSDate
*date3 = [
NSDate
dateWithTimeIntervalSinceNow
:366 * 24 * 60 * 60];
NSLog
(
@"%@"
, date3);
//
昨天的现在时刻
与
明年的现在时刻
间隔多少秒
NSTimeInterval
seconds = [date2
timeIntervalSinceDate
:date3];
//
前面的时间
-
后面的时间
NSLog
(
@"%.2lf"
, seconds);
//
现在时刻
与
1970
年
1
月
1
日
间隔多少秒
(
时间戳
)
NSTimeInterval
interval = [date
timeIntervalSince1970
];
NSLog
(
@"%lf"
, interval);
//
时间戳
:
某一时刻距离
1970
年
1
月
1
日的秒数
//
时间戳转日期
NSTimeInterval
interval1 = 1425956499;
NSDate
*date4 = [
NSDate
dateWithTimeIntervalSince1970
:interval1];
NSLog
(
@"%@"
, date4);
//
做一个练习
,
计算当前时间和一个固定时间的差值,如果差值在
60
秒内,输出
“
刚刚
”
,如果在
60
秒外
3600
秒内,输出
“xx
分钟前
”
,如果
3600
秒外,
3600*24
秒内,输出
“xx
小时前
”
。
//
当前时间
NSDate
*nowDate = [
NSDate
date
];
//
固定时间
NSDate
*aDate = [nowDate
dateByAddingTimeInterval
:3600];
//
当前时间和固定时间的间隔
NSTimeInterval
time = [aDate
timeIntervalSinceDate
:nowDate];
if
(time < 60) {
NSLog
(
@"
刚刚
"
);
}
else
if
(time < 3600 ) {
NSLog
(
@"%d
分钟前
"
, (
int
)time / 60);
}
else
if
(time < 3600 *24 ) {
NSLog
(
@"%d
小时前
"
, (
int
)time / 3600);
}
else
{
NSLog
(
@"%@"
, nowDate);
}
2.NSDateFormatter:
日期格式类
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
//
设置日期格式
//yyyy, YYYY:
四位年份
//yy, YY:
两位年份
//MM:
两位月份
,
不足补
0
//M:
一位月份
//
注
:
月份必须大写
//dd:
两位日期
,
不足补
0
//d:
一位日期
//
注意
:
日期必须小写
,
大写表示当前日期为一年的第几天
//hh:
两位
12
进制小时
,
不足补
0
//h:
一位
12
小时进制
//HH:
两位
24
进制小时
,
不足补
0
//H:
一位
24
小时进制
//mm:
两位分钟
,
不足补
0
//m:
一位分钟
//
注
:
分钟必须小写
//ss:
两位秒数
,
不足补
0
//s:
一位秒数
//
注
:
秒数必须小写
[
formatter
setDateFormat:
@"yyyy-MM-dd HH:mm:ss"
];
3.NSTimeZone:
时区类
//
设置时区
//NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"china"];//cn, beijing
NSTimeZone *timeZone = [NSTimeZone timeZoneForSecondsFromGMT:8 * 60 * 60];
[
formatter
setTimeZone:
timeZone
];
//
把某一时刻的日期
,
按照规定好的格式
,
转换成字符串
NSString
*string = [
formatter
stringFromDate:[
NSDate
date
]];
NSLog
(
@"%@"
, string);
//
将字符串
@“2014
年
05
月
01
日
10
点
23
分
18
秒
”
转换为
NSDate
对象。
NSString
*dateString =
@"2014
年
05
月
01
日
10
点
23
分
18
秒
"
;
NSDateFormatter
*formatter1 = [[
NSDateFormatter
alloc
]
init
];
[formatter1
setDateFormat
:
@"yyyy
年
MM
月
dd
日
HH
点
mm
分
ss
秒
"
];
[formatter1
setTimeZone
:[
NSTimeZone
timeZoneWithName
:
@"GMT"
]];
NSDate
*newDate = [formatter1
dateFromString
:
@"2014
年
05
月
01
日
10
点
23
分
18
秒
"
];
NSLog
(
@"%@"
, newDate);
4.
类的扩充
//(1)
对于已知类
(
可以查看
.m
文件
)
进行扩充
//
修改类的源文件
Pen *pen = [[Pen alloc] init];
[pen draw];
//(2)
对于未知类
(
不能查看
.m
文件
)
继续扩充
//a.
继承
(
子类化
),
子类重写父类的方法
,
扩充自己的方法
Pencil *pencil = [[Pencil alloc] init];
[pencil draw];
[pencil write];
//b.Category:
分类
,
类目
//
文件名
:
类名
+
分类名
.h,
类名
+
分类名
.m
[
NSString
helloWorld];
//
使用分类为未知类进行扩充的步骤
//(1)
新建文件
//(2)
选择
Objective-C file
模板
//(3)
填写分类名
,
选择
Category,
选择要扩充的类
//(4)
在
.h
中写方法声明
,
在
.m
中写方法实现
//(5)
引入头文件
,
使用扩充方法
//1.
一般用于对系统类进行扩充方法
//2.
分类中不能添加实例变量
//
做个练习
,
使用分类的方式
,
为
Pen
扩充一个
sayHi
方法
[Pen sayHi]
//Extension:
延展
,
为类扩充私有方法声明
,
实例变量
//
文件
:
类名
_
延展名
.h
//
延展的两种写法
//(1)
通过模板创建
.h,
然后在类的
.m
中引用
//
注
;
这种写法的弊端
,
如果你把
.h
引用到其他文件
,
在其他文件中也可以调用私有方法
//(2)
直接在
.m
中写
,
写法
/*
@interfance
类名
() {
实例变量
}
私有方法声明
@end
*/
//Protocol:
协议
//
遵守协议用
<>,
写在
@interfance,
父类名的后面
Boy *boy = [[Boy alloc] init];
[boy buyFood];
[boy buyiPhone];
//delegate:
代理
//
步骤
//
找代理的类
//(1)
制定协议
//(2)
添加实例变量
//(3)
为实例变量写
setter
方法
//
想要成为代理的类
//(1)
遵守协议
//(2)实现协议中必须实现的方法