`
wx1568847608
  • 浏览: 12243 次
文章分类
社区版块
存档分类
最新评论

时间戳的运用

 
阅读更多

通常后台会给我们一个时间戳活着截至日期(deadLine)。那么无论是时间戳还是一个具体的日期时间点,我们的处理逻辑都是这样的。统一处理成NSDate对象,那么就起名叫做endDate吧。我们还有一个开始时间,就是当前时间,命名为startDate。

我们要取到endDate和startDate的间隔有多久,有多长的时间间隔。那么废话少说,开始看代码,这样更清晰。 
//结束时间 
detailedDict[@”endTime”]为服务端返回的数据。 
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init]; 
if ([detailedDict[@”endTime”] length]==10) { 
[dateFormatter setDateFormat:@”yyyy-MM-dd”]; 
}else{ 
[dateFormatter setDateFormat:@”yyyy-MM-dd HH:mm:ss”]; 

// NSDate *endDate = [dateFormatter dateFromString:detailedDict[@”endTime”]];

NSDate *endDate = [dateFormatter dateFromString:@”2016-02-20”]; 
那么这里注意了,如果后台给你的是这样的具体日期,那么我们还要多加一天的时间,毕竟要倒计时到 2016-02-20日的深夜0:00啊,下一秒就是2016-02-21日了。如果后台给的是时间戳,那么不用多加一天,因为时间戳就是个具体的时间点。 
NSDate *endDate_tomorrow = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:([endDate timeIntervalSinceReferenceDate] + 24*3600)]; 
//当前时间 
NSDate *startDate = [NSDate date]; 
//得到相差秒数

NSTimeInterval timeInterval =[endDate_tomorrow timeIntervalSinceDate:startDate];

下面处理UI显示的逻辑 
if (timeInterval==0) { 
detailCell.yzImageView.hidden = NO; 
过期了,倒计时结束了 
}else{ 
detailCell.yzImageView.hidden = YES; 
没过期, 倒计时还会继续 

这里用到这个 dispatch_source_t _timer; 
把timer定义为全局的。

if (_timer==nil) {
                __block int timeout = timeInterval; //倒计时时间

                if (timeout!=0) {
                    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
                    _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
                    dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
                    dispatch_source_set_event_handler(_timer, ^{
                        if(timeout<=0){ //倒计时结束,关闭
                            dispatch_source_cancel(_timer);
                            _timer = nil;
                            dispatch_async(dispatch_get_main_queue(), ^{
                                detailCell.dayLabel.text = @"";
                                detailCell.hourLabel.text = @"00";
                                detailCell.minuteLabel.text = @"00";
                                detailCell.secondLabel.text = @"00";
                                detailCell.yzImageView.hidden = NO;
                            });
                        }else{
                            int days = (int)(timeout/(3600*24));
                            if (days==0) {
                                detailCell.dayLabel.text = @"";
                            }
                            int hours = (int)((timeout-days*24*3600)/3600);
                            int minute = (int)(timeout-days*24*3600-hours*3600)/60;
                            int second = timeout-days*24*3600-hours*3600-minute*60;
                            dispatch_async(dispatch_get_main_queue(), ^{
                                if (days==0) {
                                    detailCell.dayLabel.text = @"";
                                }else{
                                    detailCell.dayLabel.text = [NSString stringWithFormat:@"%d天",days];
                                }
                                if (hours<10) {
                                    detailCell.hourLabel.text = [NSString stringWithFormat:@"0%d",hours];
                                }else{
                                    detailCell.hourLabel.text = [NSString stringWithFormat:@"%d",hours];
                                }
                                if (minute<10) {
                                    detailCell.minuteLabel.text = [NSString stringWithFormat:@"0%d",minute];
                                }else{
                                    detailCell.minuteLabel.text = [NSString stringWithFormat:@"%d",minute];
                                }
                                if (second<10) {
                                    detailCell.secondLabel.text = [NSString stringWithFormat:@"0%d",second];
                                }else{
                                    detailCell.secondLabel.text = [NSString stringWithFormat:@"%d",second];
                                }

                            });
                            timeout--;
                        }
                    });
                    dispatch_resume(_timer);
                }
            }

转载于:https://my.oschina.net/u/3389486/blog/868473

分享到:
评论

相关推荐

    PHP时间戳使用实例代码

    照例,首先向大家介绍什么是时间戳。 说得通俗一些,时间戳就是根据当前系统时间生成的一组随机数字。时间戳一般作为对数据唯一性的一种判断依据。接下来向大家介绍一下我们可以如何运用时间戳。

    js实现通过开始结束控制的计时器

    时间戳的使用的可以取消对多次点击事件产生效果的累加,譬如下文,运用时间戳,保证了在多次点击事件后不会对setInterval()中的时间进行叠加。 开始结束运用addEventlistener()来控制开始结束, 实时显示在你要显示...

    论文研究-基于PKI的网络考试安全机制研究及实现 .pdf

    综合运用加密、数字签名、数字证书及时间戳技术实现了试题及答卷在发放和收交过程中的保密性、完整性、不可否认性及试卷评阅中可能出现的作弊等安全问题,用加密技术和时间戳技术解决试题集中下载和试卷集中提交中的...

    TDengine数据库基础操作.docx

    2.2 时间戳的运用 时间戳是 TDengine 数据库最重要的概念,创建并插入记录、查询历史记录的时候,均需要指定时间戳。时间戳有如下规则: * 时间格式为 YYYY-MM-DD HH:mm:ss.MS,默认时间分辨率为毫秒。 * 内部函数...

    论文研究-基于hash运算的RFID认证协议分析和改进.pdf

    结果表明该协议仅使用hash函数和异或操作,就达到机密性、完整性和防追踪性的安全目标,并运用时间戳作为标签查询标志,提高认证过程的执行性能。因此该协议与先前工作相比,更适合低成本的RFID系统。

    NTP协议介绍

    NTP和互联网的同步在国外已经得到广泛应用。据统计99年已有将近1万4千个专用时间服务器在工作,相应的...在国内NTP的应用日益广泛,例如在时间戳认证方面,随着网络应用的普及和深化,NTP的运用领域会获得更大的拓展。

    银行模拟代码

    银行系统模拟中的关键部分为客户事件,包括到达事件和离开事件,所有事件都被加上时间戳,放到优先队列中,队列中优先级最高的事件就是时间戳最早的事件。银行模拟中用随机数来决定下个顾客何时到达及当前顾客所需的...

    java中将string类型转换成timestamp类型

    不懂这块的看看啦,mysql中中四中时间类型之一的TimeStamp,在项目中的简单运用,如何将TimeStamp转换成自己需要的时间格式

    基于物联网感知的煤矿安全监测数据级融合研究

    运用置信距离测度与采集数据的时间戳相结合的动态限幅滤波算法对数据进行预处理以消除疏失误差,采用最优加权估计算法完成数据级融合,不需要具备传感器测量数据的任何先验知识,依据传感器方差的自相关和互相关估计,就...

    PHP测试程序运行时间的类

    类很简单,主要是运用了几个函数数组列表函数list(),字符串分割成数组函数explode(),获取时间戳和微秒数microtime(),代码如下: 复制代码 代码如下: &lt;?php class runTime { private $starTime;//开始时间 ...

    电子数据取证的可信固定方法

    运用DSA数字签名、时间戳技术,并结合基于证实数字签名的第3方保证方案,研究电子数据具体的可信固定算法。通过形式化分析,定义并描述电子数据静态属性可信的约束规则,为电子数据可信固定提供支持。结合取证实例,...

    php测试程序运行时间的类.zip

    为了测试一断程序的运行时间,特意写了这么一个类,并添加了注释,主要是运用了几个函数数组列表函数list(),字符串分割成数组函数explode(),获取时间戳和微秒数microtime(),把微秒数分割成数组并转换成变量处理,...

    网络控制系统的时延估算及补偿

    在网络控制系统中,由于带宽等原因,各个节点在交换数据和通信时会出现时延,导致系统...通过时延预估的方法,运用时间戳法估算出时延,将时间戳法和Smith预估补偿控制相结合。通过仿真可观察到比较稳定的输出响应。

    fs-company 企业网站系统 v1.1.1.rar

    运用了数据缓存和静态文件缓存技术 5、架构支持 类:字典、打包解包、数据交互、数据转储、数据查询、验证器等 fs-company企业网站系统功能 文章发布 商品发布 权限管理 客户案例发布 视频发布 用户...

    PHP基础讲义pdf版含视频下载地址。

    6. 查询与修改综合运用 118 7. mysql调试技巧 120 六、 贴吧项目 123 1. 贴吧项目之建表 123 2. include_require详解 124 3. 魔术引号与递归转义 127 4. 错误报告设置 129 5. 函数封装 131 6. 贴吧主页开发 133 7. ...

    数字签名方法及工具

    数字签名文档 本签名方法 可以运用于exe、 active控件 、dll类库集及cab包进行安全签名,让杀毒软件永远 shut up forever 1、制作exe、 active控件 、dll类库集及cab请参考以下msdn 帮助文档 ...2、制作工具 ...

    微信jssdk逻辑在vue中的运用详解

    微信 jssdk 在 vue 中的简单使用 import wx from 'weixin-js-sdk'; wx.config({ debug: true, appId: '', timestamp: , nonceStr: '', signature: '', ...以上是微信官方给出的示例代码,但是对于实际项目使用,...

    大数据技术之电商用户行为数据分析.doc

    在项目中,我们将综合运用 flink 的各种 API,基于 EventTime 去处理基本的业务需求,并且灵活地使用底层的 processFunction,基于状态编程和 CEP 去处理更加复杂的情形。 数据源解析我们准备了一份淘宝用户行为...

    发现网络中的活动主机--计算机网络课程设计.doc

    "数据报组装期间生存期减为0 " "参数问题 " "各种IP头部错误 " "缺少必须的选项 " "13 0 时间戳请求 " "14 0 时间戳应答 " "15 0 信息请求(已作废) " "16 0 信息应答(已作废) " "17 0 地址掩码请求 " "18 0 地址...

Global site tag (gtag.js) - Google Analytics