1.NSDate:日期类
NSDate *date = [NSDate date];
NSLog(@"%@", date); //默认是0时区 ,获得东八区相差8小时
//格式:年-月-日 时:分:秒 时区
//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"];
// **将NSDate 转化成 NSString
// 1 系统给定的格式
// 实例化NSDateformatter对象
NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
// 设置格式
[formatter1 setDateStyle:NSDateFormatterFullStyle]; // 格式可以自己选择
//将date转化成字符串
NSLog(@"%@",[formatter1 stringFromDate:[NSDate date]]);
// 2 自定义格式
// 实例化 对象
NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init];
[formatter2 setDateFormat:@"yyyy年MM月dd HH:mm:ss"]; //自定义格式
NSString *strDate2 = [formatter2 stringFromDate:[NSDate date]];
NSLog(@"%@",strDate2);
// **NSString 转化成 NSDate
NSDate *dateFromStr = [formatter2 dateFromString:@"2011-09-12 20:30:45"];
NSLog(@"%@",dateFromStr); //打印的时候默认0时区
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)引入头文件, 使用扩充方法
#import <Foundation/Foundation.h>
@interface NSDate (YYDate)
//字符串转化成Date (参数:设置格式的字符串 ,时间字符串)
+(NSDate *)dateFormFormatStr:(NSString *)formatStr
timeStr:(NSString *)timeStr;
+(NSString *)stringFormDate:(NSString *)date
timeDate:(NSDate *)timeDate;
@end
#import "NSDate+YYDate.h"
@implementation NSDate (YYDate)
+(NSDate *)dateFormFormatStr:(NSString *)formatStr
timeStr:(NSString *)timeStr
{
//实例化一个NSDateFormatter对象
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// 设置formatter格式
[formatter setDateFormat:formatStr];//外界传送过来
// formatter执行方法
return [formatter dateFromString:timeStr];
}
+(NSString *)stringFormDate:(NSString *)date
timeDate:(NSDate *)timeDate
{
NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
[formatter1 setDateFormat:date];
//formatter 执行方法(将要转化的字符串按照 formatter格式进行转化为date对象返回)
return [formatter1 stringFromDate:timeDate];
}
@end
//使用NSDate类目里的方法将字符串转换成date并返回
NSDate *date2 = [NSDate dateFormFormatStr:@"yyyy-MM-dd HH-mm-ss" timeStr:@"2012-05-23 12-34-45"];
NSLog(@"%@",date2);
//使用NSDate类目里的方法将date换转成字符串并返回
NSString *Str2 = [NSDate stringFormDate:@"yyyy-MM-dd HH-mm-ss" timeDate:[NSDate date]]; //默认现在时区
NSLog(@"%@",Str2);
//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)实现协议中必须实现的方法
Objc-C 知识点回顾 八 NSDate、 Extension、Category、Delegate
最新推荐文章于 2019-07-26 13:56:47 发布