Foundation框架—时间输出格式NSDateFormatter
在开发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的更多相关文章
- Foundation框架—时间处理对象NSDate
NSDate类用于保存时间值,同时提供了一些方法来处理一些基于秒级别时差(Time Interval)运算和日期之间的早晚比较等. 1. NSDate的构造方法和构造获取实例的属性 用于创建NSDat ...
- Foundation框架下的常用类:NSNumber、NSDate、NSCalendar、NSDateFormatter、NSNull、NSKeyedArchiver
========================== Foundation框架下的常用类 ========================== 一.[NSNumber] [注]像int.float.c ...
- iOS开发系列—Objective-C之Foundation框架
概述 我们前面的章节中就一直新建Cocoa Class,那么Cocoa到底是什么,它和我们前面以及后面要讲的内容到底有什么关系呢?Objective-C开发中经常用到NSObject,那么这个对象到底 ...
- 08OC之Foundation框架
1.Foundation框架简述 在前面,我们创建一个类的时候,都会选择Cocoa Class.到底Cocoa Class是什么东西呢? Cocoa 不是一门编程语言,因为它可以运行在多种编程语言上, ...
- Objective-C Foundation框架
1.字符串 OC由两个字符串:NSString和NSMutableString,NSString代表字符序列不可变的字符串,而NSMutableString则代表字符序列可变的字符串. 1.1 创建字 ...
- (转载)OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)
前一篇说到了Foundation框架中的NSDirctionary类,这一一篇来看一下Foundation的其他常用的类:NSNumber,NSDate,NSException. 注:其实按照Java ...
- iOS Foundation 框架概述文档:常量、数据类型、框架、函数、公布声明
iOS Foundation 框架概述文档:常量.数据类型.框架.函数.公布声明 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业 ...
- OC - 7.Foundation框架的简单介绍
OC语言-07-OC语言-Foundation框架 结构体 NSRange/CGRange 用来表示一个元素在另一个元素中的范围,NSRange等价于CGRange 包含两个属性: NSUInte ...
- Foundation框架的小总结
一.Foundation框架—结构体 一.基本知识 Foundation框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框架中的数 ...
随机推荐
- 20145209 2016-2017-2 《Java程序设计》第10周学习总结
20145209 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 计算机网络概述 计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层(Physi ...
- 12 动态语言 __slots__
1. 动态语言的定义 动态编程语言 是 高级程序设计语言 的一个类别,在计算机科学领域已被广泛应用.它是一类 在运行时可以改变其结构的语言 :例如新的函数.对象.甚至代码可以被引进,已有的函数可以被删 ...
- Android 项目,没有可运行的Module项
打开工程以后发现,可运行的Module 没有了.怎么办? 点击这个,即可.
- SpringBoot入门(二)——起步依赖
本文来自网易云社区 在前一篇我们通过简单几步操作就生成了一个可以直接运行的Web程序,这是因为SpringBoot代替我们做了许多工作,概括来讲可以分为起步依赖和自动配置.这一篇先来看看起步依赖. 项 ...
- 一个只有十行的精简MVVM框架(下篇)
本文来自网易云社区. 让我们来加点互动 前面学生信息的身高的单位都是默认m,如果新增一个需求,要求学生的身高的单位可以在m和cm之间切换呢? 首先需要一个变量来保存度量单位,因此这里必须用一个新的Mo ...
- 第一阶段·Linux运维基础-第2章·Linux系统目录结构介绍
01 变量与PS1 02 添加用户 03 关闭SELinux 04 关闭iptables 05 显示中文乱码排查过程 06 总结 07 目录结构课程内容 08 Linux目录结构特点 09 Linux ...
- (C#)设计模式之状态模式
1.状态模式 当一个对象的内在状态改变时允许改变其行为,这个对象看起像是改变了其类. *状态模式主要解决的是当控制一个对象的状态转换的条件表达式过于复杂时,可以将状态的判断逻辑转移到表示不同状态的一系 ...
- Python|一文简单看懂 深度&广度 优先算法
一.前言 以后尽量每天更新一篇,也是自己的一个学习打卡!加油!今天给大家分享的是,Python里深度/广度优先算法介绍及实现. 二.深度.广度优先算法简介 1. 深度优先搜索(DepthFirstSe ...
- java实现遍历一个字符串的每一个字母(总结)
基础:牢记字符串操作的各种方法: String s = "aaaljlfeakdsflkjsadjaefdsafhaasdasd"; // 出现次数 int num = ...
- 407. Plus One【LintCode java】
Description Given a non-negative number represented as an array of digits, plus one to the number. T ...