在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理。下面来介绍NSDateFormatter的常用属性和API;

 1.常用属性

@property (null_resettable, copy) NSString *dateFormat;//设置输出时间内容:

/*quarter--->季度
公元前/后:AD
年份:2017=2017=17
季度:2=Q2=2nd quarter
月份:4=Apr=April
今天是今年第几周:17
今天是本月第几周:5
今天是今天第几天:114
今天是本月第几天:24
今天是星期几:Monday
星期:2=Mon=Monday
上午/下午:AM
小时:10=10
分钟:30
秒:48
毫秒:918
这一天已过多少毫秒:37848918
时区名称:China Standard Time=China Standard Time 时区编号:+0800
*/
/*
G: 公元时代,例如AD公元
yy: 年的后2位
yyyy: 完整年
MM: 月,显示为1-12
MMM: 月,显示为英文月份简写,如 Jan
MMMM: 月,显示为英文月份全称,如 Janualy
dd: 日,2位数表示,如02
d: 日,1-2位显示,如 2
EEE: 简写星期几,如Sun
EEEE: 全写星期几,如Sunday
aa: 上下午,AM/PM
H: 时,24小时制,0-23
K:时,12小时制,0-11
m: 分,1-2位
mm: 分,2位
s: 秒,1-2位
ss: 秒,2位
S: 毫秒
Z:GMT
*/

例子:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"\
'公元前/后:'G\
'年份:'u'='yyyy'='yy\
'季度:'q'='qqq'='qqqq\
'月份:'M'='MMM'='MMMM \
'今天是今年第几周:'w \
'今天是本月第几周:'W \
'今天是今年第几天:'D \
'今天是本月第几天:'d \
'今天是星期几:'EEEE \
'星期:'c'='ccc'='cccc \
'上午/下午:'a \
'小时:'h'='H\
'分钟:'m\
'秒:'s \
'毫秒:'SSS\
'这一天已过多少毫秒:'A \
'时区名称:'zzzz'='vvvv \
'时区编号:'Z "]; NSLog(@"%@", [dateFormatter stringFromDate:[NSDate date]]);

//"yyyy年MM月dd日 HH时mm分ss秒 +0800";

//按照什么样的格式来格式化时间

//formatter.dateFormat = @"yyyy年MM月dd日 HH时mm分ss秒 Z";

//formatter.dateFormat = @"yyyy/MM/dd HH/mm/ss Z";

//formatter.dateFormat = @"MM-dd-yyyy HH-mm-ss";

@property NSDateFormatterStyle dateStyle;

@property NSDateFormatterStyle timeStyle;

//设置日期对象展示方式,关于样式:

typedef NS_ENUM(NSUInteger, NSDateFormatterStyle) {    // date and time format styles

    NSDateFormatterNoStyle = kCFDateFormatterNoStyle,

    NSDateFormatterShortStyle = kCFDateFormatterShortStyle,

    NSDateFormatterMediumStyle = kCFDateFormatterMediumStyle,

    NSDateFormatterLongStyle = kCFDateFormatterLongStyle,

    NSDateFormatterFullStyle = kCFDateFormatterFullStyle

};

 /*

       NSDateFormatterStyle几种取值样式

       NSDateFormatterNoStyle

       例如: (其实就是空白的,不显示) 

       NSDateFormatterShortStyle

       例如:下午7:00 | 15/5/19

       NSDateFormatterMediumStyle

       例如:下午7:00:00 | 2013年5月19日

       NSDateFormatterLongStyle

       例如:GMT +8下午7:00:00 | 2013年5月19日 

       NSDateFormatterFullStyle

       例如:中国标准时间下午7:00:00 | 2013年5月19日 星期日

     */

 

@property (null_resettable, copy) NSLocale *locale;//设置本地的属性,可通过设置本地对象来决定打印出来的语言,比如设置本地标示为zh_CN,那么会用中文打印结果;

 //NSLocale
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:];
//大陆--简体中文
dateFormatter2.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];//简体中文
NSLog(@"%@", [dateFormatter2 stringFromDate:date]);
// US English Locale (en_US)
dateFormatter2.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSLog(@"%@", [dateFormatter2 stringFromDate:date]); // Jan 2, 2001
// French Locale (fr_FR)
dateFormatter2.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"fr_FR"];
NSLog(@"%@", [dateFormatter2 stringFromDate:date]); // 2 janv. 2001
// Japanese Locale (ja_JP)
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"];
NSLog(@"%@", [dateFormatter2 stringFromDate:date]); // 2001/01/02

  

 

@property (null_resettable, copy) NSTimeZone *timeZone;//时区的设置,我们所处的中国是在东八区。通过系统API调用获取到的时间对象默认是GMT时间,也即是0时区时间,虽然在绝对时间上哪个时区都一样,但是在具体地方的相对时间展示是不同的。因此要具体展示时可以调整相应的时区。关于NSTimeZone的知识介绍,可以参考我的另一篇博文

NSDateFormatter中timezone的使用:

// NSDateFormatter 设置时区
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// 设置时区,设置为 GMT
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:]];

@property (null_resettable, copy) NSCalendar *calendar;;//日历对象,关于NSCalendar的知识介绍,可以参考我的另一篇博文

 2.常用方法

stringFromDate

dateFromString

好了,关于NSDateFormatter的常用知识点了解的差不多了,现在让我们来一段实战代码:

 //        获取时间
NSDate *date = [NSDate date];
NSLog(@"国际标准时间:%@",date);
// 获取系统当前时区
NSTimeZone *zone = [NSTimeZone systemTimeZone];//中国位于东八区、与国际标准时间相差8小时
// 获取当前时区与格林尼治时间的间隔
NSTimeInterval ti = [zone secondsFromGMTForDate:date];
//获取本地时间
NSDate *localDate = [NSDate dateWithTimeIntervalSinceNow:ti];
NSLog(@"当前时区的时间:%@",localDate);
//
/*日期格式转换*/
NSDateFormatter *dfmt = [[NSDateFormatter alloc]init];
//设置日期格式 注意大小写的区分
dfmt.dateFormat = @"yyyy年MM月dd日 HH时:mm分:ss秒";
//按照日期格式 转化为字符串
//GMT时间转换为日期字符串
NSLog(@"日期转字符串2:%@",[dfmt stringFromDate:date]);
//本地时间对象转化内时间字符串
NSString *localDateString = [dfmt stringFromDate:localDate];//调用这个API时,默认将时间对象认为时格林尼日志时间(内部又重新加了格林尼治时间与当前时区的时差8小时,所以要获取当前时间的字符串对象时,不需要再额外转换成当前时区的时间对象)
NSLog(@"日期转字符串:%@",localDateString);
//按照日期格式 将时间字符串转化为时间对象
NSDate *localDate2 = [dfmt dateFromString:localDateString];
NSLog(@"字符串转日期:%@",localDate2);

Foundation框架—时间输出格式NSDateFormatter的更多相关文章

  1. Foundation框架—时间处理对象NSDate

    NSDate类用于保存时间值,同时提供了一些方法来处理一些基于秒级别时差(Time Interval)运算和日期之间的早晚比较等. 1. NSDate的构造方法和构造获取实例的属性 用于创建NSDat ...

  2. Foundation框架下的常用类:NSNumber、NSDate、NSCalendar、NSDateFormatter、NSNull、NSKeyedArchiver

    ========================== Foundation框架下的常用类 ========================== 一.[NSNumber] [注]像int.float.c ...

  3. iOS开发系列—Objective-C之Foundation框架

    概述 我们前面的章节中就一直新建Cocoa Class,那么Cocoa到底是什么,它和我们前面以及后面要讲的内容到底有什么关系呢?Objective-C开发中经常用到NSObject,那么这个对象到底 ...

  4. 08OC之Foundation框架

    1.Foundation框架简述 在前面,我们创建一个类的时候,都会选择Cocoa Class.到底Cocoa Class是什么东西呢? Cocoa 不是一门编程语言,因为它可以运行在多种编程语言上, ...

  5. Objective-C Foundation框架

    1.字符串 OC由两个字符串:NSString和NSMutableString,NSString代表字符序列不可变的字符串,而NSMutableString则代表字符序列可变的字符串. 1.1 创建字 ...

  6. (转载)OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)

    前一篇说到了Foundation框架中的NSDirctionary类,这一一篇来看一下Foundation的其他常用的类:NSNumber,NSDate,NSException. 注:其实按照Java ...

  7. iOS Foundation 框架概述文档:常量、数据类型、框架、函数、公布声明

    iOS Foundation 框架概述文档:常量.数据类型.框架.函数.公布声明 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业 ...

  8. OC - 7.Foundation框架的简单介绍

    OC语言-07-OC语言-Foundation框架   结构体 NSRange/CGRange 用来表示一个元素在另一个元素中的范围,NSRange等价于CGRange 包含两个属性: NSUInte ...

  9. Foundation框架的小总结

    一.Foundation框架—结构体 一.基本知识 Foundation框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框架中的数 ...

随机推荐

  1. python脚本 mongodb到postgresql

    安装 mongo模块 pip install pymongo 安装postgresql 驱动 pip install python-psycopg2  1 # -*- coding: utf-8 -* ...

  2. BZOJ3224_普通平衡树_KEY

    题目传送门 平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树.平衡二叉树的常用实现方法有红 ...

  3. POJ3259_Wormholes_KEY

    题目传送门 题目大意:有F组数据,N表示有N点,M表示有M条边,走一遍边需要花费Ti个时间,还有W个虫洞,可以向前回溯Ti时间,求能否从1点出发,经过一些路或虫洞回到1点后时间为负. 建图后用SPFA ...

  4. 北京Uber优步司机奖励政策(3月20日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  5. 一、Lambda表达式

    一.Lambda是什么? Lambda是一个匿名函数,我们可以把Lambda理解为是一段可以传递的代码.可以写出简洁.灵活的代码.作为一种更紧凑的代码风格,使java的语言表达能力得到提升. 二.La ...

  6. Python 函数参数类型大全(非常全!!!)

    Python 函数参数类型大全(非常全!!!) 1.在python编写程序里面具有函数文档,它的主要作用是为了让别人可以更好的理解你的函数,所以这是一个好习惯,访问函数文档的方式是: MyFuncti ...

  7. 基于 CPython 解释器,为你深度解析为什么Python中整型不会溢出

    前言 本次分析基于 CPython 解释器,python3.x版本 在python2时代,整型有 int 类型和 long 长整型,长整型不存在溢出问题,即可以存放任意大小的整数.在python3后, ...

  8. 【CSV数据文件】

    文件参数化设置方法

  9. SVG Sprite 使用Symbol元素制作ICON

    介绍 SVG是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法.之前写过两篇关于CSS icon在页面显示的博客,后来了解到现在大多数前端团队和项目都在使用SVG Sprite这种方 ...

  10. Quartz定时器原理与使用

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是一个完全由java编写的开源作业调度框架. Quartz可以用来创建简单或为运行十个,百个,甚至是好几 ...