iOS开发之OC入门(NSDate日期、NSCalendar日历、倒计时)(定时器:NSTimer、CADisplaylink、随机数)

NSDate

可以得到当前时间,创建一个NSDate对象并将其输出,能得到当前系统的格林威治时间,即0时区

	NSDate *date = [NSDate date];
	NSLog(@"%@",date);

格式化输出日期

  • 默认格式:年-月-日 时:分:秒 +时区
	//创建一个日期格式化对象
	NSDateFormatter *formatter = [NSDateFormatter new];
	formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";//规定格式转化,并转化为当前系统的时间
	NSString *str = [formatter stringFromDate:date];//获取
	NSLog(@"%@",str);

	yyyy 年
	MM 月
	dd 日
	HH 24小时制
	hh 12小时制
	mm 分
	ss 秒
  • 字符串转为日期
	NSDateFormatter *formatter = [NSDateFormatter new];
	formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";//规定格式转化,并转化为当前系统的时间```
	NSDate *date = [formatter dataFromString:@"2000-01-01"];

NSCalendar日历

	NSCalendar *calendar = [NSCalendar currentCalendar];
	CGFloat time = [calendar component:NSCalendarUnitSecond fromData:[NSData data]];
	//获取当前秒

处理时间

	//秒制时间转换
	NSDate *date = [NSDate dateWithTimeIntervalSince1970:秒制时间];

	//计算8小时后的时间,0时区+8H=8时区(北京时间)
	NSDate *date = [NSDate dateWithTimeIntervalSinceNow:8*60*60];//得到当前系统的格林威治时间,即0时区再+8时区 等于当前北京时间
	NSLog(@"%@",date);

	//日期相减
	NSCalendar *calendar = [NSCalendar currentCalendar];
	NSDateComponents *components = [calendar components:NSCalendarUnitMinute fromDate:date toDate:[NSDate date] options:0];

	//得到时间差
	NSDate *start = [NSDate date];
	NSDate *end = [NSDate date];
	double time = [end timeIntervalSinceDate:start]

倒计时

- (void)mathTime{
    NSDateFormatter *formatter = [NSDateFormatter new];
    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";//规定格式转化
    //开始和结束时间
    NSDate *creatDate = [formatter dateFromString:_model.createTime];//获取的时间
    NSDate *nowDate = [NSDate dateWithTimeIntervalSinceNow:8*60*60];//当前时间
    //时间差
    double time = 24*60*60-[nowDate timeIntervalSinceDate:creatDate];
    //时间转化 秒制数据 -> NSDate
    NSDate *Date = [NSDate dateWithTimeIntervalSinceReferenceDate:time];
    
    NSDateFormatter *timeFormatter = [NSDateFormatter new];
    timeFormatter.dateFormat = @"HH : mm : ss";//规定格式转化
    _timeDownLab.text = [timeFormatter stringFromDate:Date];
}

NSTimer定时器

两种不同的定时器
NStimer(时间间隔比较大1秒,几秒)
CADisplaylink(时间间隔比较小,0.0几秒等)
GCD定时器

  • 启动定时器的两种方法:
  • 1:调用 timerwithxxx创建的 timer,把这个 timer对象手动加到消息循环中才能启动
  • 2:调用 scheduleXx创建的 timer,自动启动(创建完毕后自动启动)
	方法一
	NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(demo) userInfo:nil repeats:YES];
	//把定时器添加到当前线程的消息循环中
	[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

	消息循环是在一个指定的模式下运行的,设置的输入事件也需要指定一个模式,默认是NSDefaultRunLoopMode

	NSRunLoopCommonModes包括了多种模式
	UITrackingRunLoopMode 当滚动scrollView的时候,消息循环的模式自动改变

-(void)demo{
  NSLog(@hello!"");
}
	方法二 自动启动
	[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(demo) userInfo:nil repeats:YES];
	停止计时器,一旦停止不可重用,需要重新创建
	[self.timer invalidate];
	self.timer = nil;
	计时器优先级
	//获取消息当前循环
	NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
	[runLoop  addTimer:timer forMode:NSRunLoopCommonModes];

CADisplaylink

CADisplaylink是一种以屏幕刷新频率触发的时钟机制,每秒钟执行大约60次左右
CADisplaylink是一个计时器,可以使绘图代码与视图的刷新频率保持同步,而 NSTimer无法确保计时器实际被触发的准确时间(例如1s999ms和2s的差距,会显示1s和2s)
显示动画,为了保证流畅性,可以使用这个而不是NSTime,可以达到60帧

  • 使用方法定义CADisplaylink并制定触发调用方法,将显示链接添加到主运行循环队列
	CADisplaylink *link = [CADisplaylink displayLinkWithTarget:self selector:@selector(timeChange)];
	[link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

随机数生成

	C语言函数,随机生成一个无符号的整数(0-((0-232次方)-1))
	arc4random()
	随机生成一个0-n的整数
	arc4random()%(n+1)
  • 推荐使用:arc4random_uniform()
	生成0-10的整数
	int num = arc4random_uniform(10);
	NSString stringNum = [NSString stringWithFormat:@"%d",num];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值