iOS开发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:118800]; //大陆--简体中文 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:0]];
@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);