iOS 转载一篇日期处理文章
感谢原作者的辛勤付出,由于时间太久,记不住原来的地址了,如果你是原作者,请联系我,我会添加原文连接,谢谢!
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对象
iOS 转载一篇日期处理文章的更多相关文章
- iOS 转载一篇利用dispatch_once创建单例的文章
感谢文章原作者,http://bj007.blog.51cto.com/1701577/649413
- 上一篇括号配对让人联想起catalan数,顺便转载一篇归纳的还不错的文章
转载请注明来自souldak,微博:@evagle 怎么样才是合法的组合? 只要每一时刻保证左括号的数目>=右括号的数目即可. 直接递归就行,每次递归加一个括号,左括号只要还有就能加,右括号要保 ...
- iOS开发网络篇—监测网络状态(转)
文章转载自:http://www.cnblogs.com/wendingding/p/3950114.html iOS开发网络篇—监测网络状态 一.说明 在网络应用中,需要对用户设备的网络状态进行实时 ...
- iOS系列 基础篇 06 标签和按钮 (Label & Button)
iOS系列 基础篇 06 标签和按钮 (Label & Button) 目录: 标签控件 按钮控件 小结 标签和按钮是两个常用的控件,下面咱们逐一学习. 1. 标签控件 使用Single Vi ...
- iOS系列 基础篇 08 文本与键盘
iOS系列 基础篇 08 文本与键盘 目录: 1. 扯扯犊子 2. TextField 3. TextView 4. 键盘的打开和关闭 5. 打开/关闭键盘的通知 6. 键盘的种类 7. 最后再扯两句 ...
- iOS系列 基础篇 09 开关、滑块和分段控件
iOS系列 基础篇 09 开关.滑块和分段控件 目录: 案例说明 开关控件Switch 滑块控件Slider 分段控件Segmented Control 1. 案例说明 开关控件(Switch).滑块 ...
- iOS 开发多线程篇—GCD的常见用法
iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...
- iOS开发UI篇—Date Picker和UITool Bar控件简单介绍
iOS开发UI篇—Date Picker和UITool Bar控件简单介绍 一.Date Picker控件 1.简单介绍: Date Picker显示时间的控件 有默认宽高,不用设置数据源和代理 如何 ...
- iOS开发拓展篇—音频处理(音乐播放器1)
iOS开发拓展篇—音频处理(音乐播放器1) 说明:该系列文章通过实现一个简单的音乐播放器来介绍音频处理的相关知识点,需要重点注意很多细节的处理. 一.调整项目的结构,导入必要的素材 调整后的项目结构如 ...
随机推荐
- hdu3986 spfa+枚举
这题让我第一次感受到了什么叫做在绝望中A题.这题我总共交了18次,TLE不知道几次,WA也不知道几次. 这题不能用dijkstra,用这个我一直超时(我没试过dij+优先队列优化,好像优先队列优化后可 ...
- [Asp.net mvc]实体更新异常:存储区更新、插入或删除语句影响到了意外的行数(0)。实体在加载后可能被修改或删除。
学习asp.net mvc 时在更新实体进行SaveChanges()的时候出现了异常,异常如下: “/”应用程序中的服务器错误. 存储区更新.插入或删除语句影响到了意外的行数(0).实体在加载后可能 ...
- BZOJ-2756 奇怪的游戏 黑白染色+最大流+当前弧优化+二分判断+分类讨论
这个题的数据,太卡了,TLE了两晚上,各种调试优化,各种蛋疼. 2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec Memory Limit: 128 MB Submit ...
- eclipse中运行python脚本中有注释为中文的内容,报错:SyntaxError: Non-ASCII character '\xe5'
'''Created on 2015年7月2日 @author: liujuan'''import sysreload(sys) 以上为注释的有个日期中文的,结果运行报错:SyntaxError: N ...
- what linux java cpu 100% ?
1.用top找到最耗资源的进程id [ bin]# toptop - 16:56:14 up 119 days, 6:17, 7 users, load average: 2.04, 2.07, 2. ...
- P1067Warcraft III 守望者的烦恼(十大矩阵问题之七求递推式)
https://vijos.org/p/1067 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她 ...
- Spring学习4-面向切面(AOP)之aspectj注解方式
一.简介 1.AOP用在哪些方面:AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理.日志管理.权限控制,异常处理等,封装起来,便于减少系统的重复代码,降低模块间的耦合 ...
- 分布式缓存BeIT Memcached简介(转载)
或许你还没有用到过分布式缓存,在web集群的情况下,它可以很好的让一部分常用数据常驻服务器内存而不用担心各台web不同步.下 面稍微介绍一下beitmemcached对于.net的支持,官方参考htt ...
- Visual Studio Online Integrations-Collaboration
原文:http://www.v ...
- Java JNI 编程进阶 实例+c++数据类型与jni数据类型转换
原文:http://www.iteye.com/topic/295776 JNI一直以来都很少去关注,但却是我心中的一个结,最近这几天刚好手头有点时间,因此抽空看了一下这方面的东西,整理了一份文档,J ...