• 登录 | 注册

sakulafly的专栏

  • 目录视图
  • 摘要视图
  • 订阅
Markdown博文大赛清新开启     天天爱答题 一大波C币袭来     中国云计算大会演讲议题公布     大数据完美组合Spark+Scala    

iOS中处理时间的类

分类: iOS开发2013-04-27 22:05 5437人阅读 评论(0) 收藏 举报
iOSNSDateNSDateCompontesNSDateFormatterNSCalendar

iOS处理时间的类主要包括NSDate,NSDateFormatter, NSDateComponents, NSCalendar等等,他们每个都是负责处理什么,又是如何配合起来使用呢?

1. NSDate这个类就是生成一个date
如果你用[NSDate date]这个最最常用的方法你可以得到系统当前的时间(UTC时间,不管你当前时区的)
比如:
NSDate *date = [NSDate date];
NSLog(@"%@", date);
输出:
2013-04-27 07:25:59 +0000

在类的头文件NSDate.h中,我们可以看到所有的方法和类方法,但没有任何一个数据,所以我们可以打印出时间的字符串,但没办法单独去获得年、月、日等信息。
在苹果的官方文档上说这个类用来描述一个特定的时间点,也就是说可以记录一个瞬间的时间点,然后这个数据是不能修改的。
这个类提供方法来获得时间(过去,当前,未来都可以),计算两个时间之间的间隔,比较时间,描述时间内容

2. NSDateFormatter
顾名思义,这个类是描述date的打印显示格式,是配合NSDate类工作的。
因为不同地域习惯的格式不同,用户也会设置不同的格式,所以iOS提供了很丰富的设置方法,显示参数,基本上你能想到见到的方法都被一网打尽了。
你可以设置时间显示格式,日期格式,时间格式,还有时区等等,最方便的是,你还可以设置AM/PM,月份,星期的显示内容,这点在某些特殊情形时真的非常方便(默认的功能已经非常方便了)
– dateFormat
– setDateFormat:
– dateStyle
– setDateStyle:
– timeStyle
– setTimeStyle:

最常用的几个方法如下:
设置格式:
- (void)setDateFormat:(NSString *)string;  
打印成字符串信息:
- (NSString *)stringFromDate:(NSDate *)date;
设置格式模板:
+ (NSString *)dateFormatFromTemplate:(NSString *)tmplate options:(NSUInteger)opts locale:(NSLocale *)locale NS_AVAILABLE(10_6, 4_0);

关于DateFormat的格式,先给出几个例子如下:
NSDate *date = [NSDate date];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"dd/MM/yyyy hh:mm:ss aaa"];
NSLog(@"curr=%@, dateFormate=%@", [df stringFromDate:date], df.dateFormat);

变化dataFormat就可以变化时间的输出格式
curr=27/04/2013 03:42:21 PM, dateFormate=dd/MM/yyyy hh:mm:ss aaa
curr=02013-4月-27 公元 03:45 PM, dateFormate=yyyyy-MMMM-dd GGG hh:mm aaa
curr=3:45 PM, 格林尼治标准时间+0800, dateFormate=K:mm a, z
curr=03 o'clock PM,中国标准时间, dateFormate=hh 'o''clock' a,zzzz
curr=3:46 PM, dateFormate=h:mm a
curr=周六, 4月 27, '13 , dateFormate=EEE, MMM d, ''yy 
curr=2013:04:27 公元 at 15:47:11 格林尼治标准时间+0800, dateFormate=yyyy:MM:dd G 'at' HH:mm:ss zzz
这是在网上找的几个例子,如果要显示成自己希望的格式,那么还需要自己写出格式来

+ (NSString *)dateFormatFromTemplate:(NSString *)template options:(NSUInteger)opts locale:(NSLocale *)locale

这个方法可以设置显示格式的模板,便于后面使用。

看到这里,估计大家都会想:这个格式的设置有没有什么规律呢,或者说按照什么方法来书写呢?

我带着这个问题搜索过,结果写在另一篇blog中《时间格式串的意义》

3. NSDateComponents类
这个类也没啥神秘的,就是可以得到我们比较熟悉的年月日时分秒信息,在一些计算显示场合很有用处,用NSDate类是无法单独来获得每一个元素信息的,必须使用这个NSDateComponents类。

4. NSCalendar类
这个类用来描述一种特定的日历。同时还提供了大部分基于时间计算的接口,并且把NSDate类和NSDateComponents类联系了起来。

这几个类本来看着各自实现各自的功能,但是所谓的年月日等等时间信息是必须配合一种历法才能表述的,比如:同一个日子,阳历和阴历就是可能不同的几号,甚至不同的月份不同的年份
所以当你说XXXX年XX月XX日的时候,机器一定是基于一种日历来的(最常用的当然是Gregorian历啦),所以仔细观察NSDateFormatter和NSDateComponents这两个类都有calendar这个数据成员。其中NSDateComponents这个类既有NSDate,又有NSCalendar成员。

- (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)date

根据标志,从NSDate转到NSDateComponents,这样可以获得对应的时间元素

- (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts
可以获得起始/终止时间之间的间隔,用NSDateComponents来表示

- (NSDate *)dateByAddingComponents:(NSDateComponents *)comps toDate:(NSDate *)date options:(NSUInteger)opts
在加上一个NSDateComponents之后返回一个NSDate的对象

- (NSDate *)dateFromComponents:(NSDateComponents *)comps
从NSDateComponets对象转换为NSDate对象

转载于:https://www.cnblogs.com/wangjuneng/p/4501746.html

iOS中处理时间的类相关推荐

  1. iOS中,在类的源文件(.m)中,@interface部分的作用?

    此@interface部分为类扩展(extension). 其被设计出来就是为了解决两个问题的 其一,定义类私有方法的地方. 其二,实现public readonly,private readwrit ...

  2. android+iso+app,Android、iOS中7个超不错的高质量App

    Android.iOS中7个超不错的高质量App 2020-02-10 21:58:41 48点赞 457收藏 20评论 1.笔趣阁-综合阅读极速版(Android.iOS) 笔趣阁大家一定不陌生,我 ...

  3. IOS中获取各个文件的目录路径的方法和NSFileManager类

    转自:http://blog.sina.com.cn/s/blog_5fb39f910101di92.html IOS中获取各种文件的目录路径的方法 iphone沙箱模型的有四个文件夹,分别是什么,永 ...

  4. iOS中分类(category)和类扩展(Extension)的区别

    iOS中分类(category)和类扩展(Extension)的区别 一.分类的定义: 分类是OC中的特有语法,它是表示一个指向分类结构体的指针,它是为了扩展系统类的方法而产生的一种方式. 二.分类的 ...

  5. 1、OPenGL ES - 简介、iOS中GLKit简单应用

    OPenGL ES -  简介.iOS中GLKit简单应用 一.OPenGL ES 1.简介: OpenGL ES 是以手持和嵌入式为目标的高级的3D图形应用程序编程接口(API),OpenGL ES ...

  6. ios中常用的第三方库

    下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableVie ...

  7. iOS中几种数据持久化方案总结

    概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) ...

  8. iOS中关于NSTimer使用知多少

    看到这个标题,你可能会想NSTimer不就是计时器吗,谁不会用,不就是一个能够定时的完成任务的东西吗? 我想说你知道NSTimer会retain你添加调用方法的对象吗?你知道NSTimer是要加到ru ...

  9. iOS中JS 与OC的交互(JavaScriptCore.framework)

    iOS中实现js与oc的交互,目前网上也有不少流行的开源解决方案: 如:react native 当然一些轻量级的任务使用系统提供的UIWebView 以及JavaScriptCore.framewo ...

  10. iOS 中KVC、KVO、NSNotification、delegate 总结及区别

    iOS 中KVC.KVO.NSNotification.delegate 总结及区别 1.KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属 ...

最新文章

  1. Linux下通过v4l2获取视频设备名、支持的编解码及视频size列表实现
  2. 远程办公难?实战经验为你打消4大顾虑
  3. 尽管网站有些建设细节微不足道但终会一一爆发
  4. Redis 启动与授权
  5. 【收藏】快速排查无线AP故障的十种方法
  6. 失败用例重跑机制-python装饰器
  7. zabbix3.2.4监控MySQL5.7.16状态
  8. socket io 不使用redis_Redis这么快,线程模型竟然是单线程
  9. 【Docker】Docker 启用 Kubernetes 报错 insecure-registries Must be host[ port] or CIDR
  10. 爬取上千个年度基金后,才知道这有多坑,千万别被人当韭菜给割了
  11. mysql 断言,mysql触发器模拟断言
  12. “食尸鬼行动”攻击30多个国家超过130家企业 包括中国
  13. matlab人机交互界面设计
  14. PDF打印内容缺失问题解决办法
  15. 简单模拟鼠标键盘操作
  16. 倾城Q码 倾城梦网 掌上投洽会 掌上6 18首页
  17. JPA学习笔记1——JPA基础
  18. 两种实现Z-Score的方法
  19. The 2020 ICPC Asia Shenyang Regional Programming Contest I题 Rise of Shadows(数论)
  20. 湖南多校对抗赛(2015.03.28)

热门文章

  1. 矩阵分析 (五) 矩阵的分解
  2. 矩阵分析 (四)向量和矩阵的范数
  3. autotools使用总结
  4. Core 提交返回500 问题 记录 来自网上文章
  5. 如何调用npm已经安装在全局位置的模块
  6. android数据交互方式(整理)
  7. Https之SSL原理
  8. [CTSC1999] 家园
  9. 前端-CSS-10-定位
  10. 简单的excel上传解析和错误反馈信息下载