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中,在类的源文件(.m)中,@interface部分的作用?
此@interface部分为类扩展(extension). 其被设计出来就是为了解决两个问题的 其一,定义类私有方法的地方. 其二,实现public readonly,private readwr ...
- 06 (OC)* iOS中UI类之间的继承关系
iOS中UI类之间的继承关系 此图可以更好的让你去理解iOS中一些底层的关系.你能够了解以及理解UI类之间的继承关系,你会更加明白苹果有关于底层的东西,更有助于你的项目开发由它们的底层关系,就能更加容 ...
- IOS中获取各个文件的目录路径的方法和NSFileManager类
转自:http://blog.sina.com.cn/s/blog_5fb39f910101di92.html IOS中获取各种文件的目录路径的方法 iphone沙箱模型的有四个文件夹,分别是什么,永 ...
- iOS中的分类(category)和类扩展(extension)
今天在研究swift的时候看到了分类和扩展.这是两个十分重要有用的功能,但是之前用的不多,没有深入了解过,在今天就从头理一遍. 一.分类(Category): 概念: 分类(Category)是OC中 ...
- iOS中编写单例类的心得
单例 1.认识过的单例类有哪些: NSUserDefaults.NSNotificationCenter.NSFileManager.UIApplication 2.单例类 单例类某个类在代码编写时使 ...
- iOS中数据库应用基础
iOS 数据库入门 一.数据库简介 1.什么是数据库? 数据库(Database) 是按照数据结构来组织,存储和管理数据的仓库 数据库可以分为2大种类 关系型数据库(主流) PC端 Oracle My ...
- iOS 中的 HotFix 方案总结详解
相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结.iOS中的HotFix方案大致可以分为四种: WaxPatch(Alibaba) Dynamic Framework(Ap ...
- iOS中使用正则
一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...
- iOS 中 ARC 项目 兼容 MRC
iOS 项目中MRC 和 ARC 项目的代码兼容问题: 1.ARC 项目中导入 MRC 第三方类的时候要在此类上添加 -objc-arc. 2.MRC 项目中导入 ARC 类的时候要在次类上添加 -f ...
随机推荐
- 数据库SQL语言类型(DQL.DML.DDL.DCL)
1.SQL语言 SQL(Structure Query Language)语言是数据库的核心语言. SQL是一个标准的数据库语言, 是面向集合的描述性非过程化语言. 它功能强,效率高,简单易学易维护. ...
- java 方法 compareTo()的正确使用
总结:(1)如果比较的是数字 则结果大于则为1 等于则为0 小于则为-1(2)如果比较的是字符[串] 则按照从左到右排序找对应不一样的字符第一个字符, 然后将字符装对应的ASCLL码数字,做减法运算, ...
- Hive的分析函数的使用
原文: https://www.toutiao.com/i6769120000578945544/?group_id=6769120000578945544 我们先准备数据库.表和数据 开窗分析函数相 ...
- Swagger的应用
一.介绍 一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 框架. 二.依赖 <dependency> <groupId>io.springf ...
- 基于Bert的恶意软件多分类
基于Bert从Windows API序列做恶意软件的多分类 目录 基于Bert从Windows API序列做恶意软件的多分类 0x00 数据集 0x01 BERT BERT的模型加载 从文本到ids ...
- leetcode 55. 跳跃游戏 及 45. 跳跃游戏 II
55. 跳跃游戏 问题描述 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1: 输入: [2,3,1, ...
- [SWPUCTF 2018]SimplePHP
[SWPUCTF 2018]SimplePHP 知识点 1.PHP反序列化入门之phar 2.反序列化魔术方法 __construct()//当一个对象创建时被调用 __destruct() //当一 ...
- C# TCP传输文件示例代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- winform控件拖动
示例代码 using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Form ...
- 【刷题-PAT】A1101 Quick Sort (25 分)
1101 Quick Sort (25 分) There is a classical process named partition in the famous quick sort algorit ...
目录视图
摘要视图
订阅