日期格式:
年:
y
将年份 (0-9) 显示为不带前导零的数字yy
以带前导零的两位数字格式显示年份yyy
以四位数字格式显示年份yyyy
以四位数字格式显示年份
月:
M
将月份显示为不带前导零的数字(如一月表示为 1)MM
将月份显示为带前导零的数字(例如 01/12/01)MMM
将月份显示为缩写形式(例如 Jan)MMMM
将月份显示为完整月份名(例如 January)- 一月 Jan January
- 二月 Feb February
- 三月 Mar March
- 四月 Apr April
- 五月 May May
- 六月 Jun June
- 七月 Jul July
- 八月 Aug August
- 九月 Sep September
- 十月 Oct October
- 十一月 Nov November
- 十二月 Dec December
星期:
EEE
将日显示为缩写形式(例如 Sun)EEEE
将日显示为全名(例如 Sunday)- 星期一 Mon Monday
- 星期二 Tue Tuesday
- 星期三 Wed Wednesday
- 星期四 Thu Thursday
- 星期五 Fri Friday
- 星期六 Sat Saturday
- 星期天 Sun Sunday
日:
d
将日显示为不带前导零的数字(如 1)dd
将日显示为带前导零的数字(如 01)
时:
h
使用 12 小时制将小时显示为不带前导零的数字(例如 1:15:15 PM)hh
使用 12 小时制将小时显示为带前导零的数字(例如 01:15:15 PM)H
使用 24 小时制将小时显示为不带前导零的数字(例如 1:15:15)HH
使用 24 小时制将小时显示为带前导零的数字(例如 01:15:15)
分:
m
将分钟显示为不带前导零的数字(例如 12:1:15)mm
将分钟显示为带前导零的数字(例如 12:01:15)
秒:
s
将秒显示为不带前导零的数字(例如 12:15:5)ss
将秒显示为带前导零的数字(例如 12:15:05)f
显示秒的小数部分ff
将精确显示到百分之一秒ffff
将精确显示到万分之一秒- 用户定义格式中最多可使用七个 f 符号
上下午:
t
使用 12 小时制- 中午之前任一小时显示大写的 A
- 中午到 11:59 PM 之间的任一小时显示大写的 P
tt
对于使用 12 小时制的区域设置- 中午之前任一小时显示大写的 AM
- 中午到 11:59 PM 之间的任一小时显示大写的 PM
- 对于使用 24 小时制的区域设置,不显示任何字符
时区:
z
显示不带前导零的时区偏移量zz
显示带前导零的时区偏移量(例如 -08)zzz
显示完整的时区偏移量(例如 -0800)
纪元:
gg
显示时代/纪元字符串(例如 A.D.)
日期需求:
需求1.输出当前时间,例如2016-06-18 16:46:10 Saturday
//1.用[NSDate date]可以获取系统当前时间 NSDate * currentDate = [NSDate date]; //2.实例化一个日期格式转换器 NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; //3.指定地区一定要指定,否则真机运行会有问题,统一用 en 即可 dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en"]; //4.设置输出格式 dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss EEEE"; //5.通过日期格式转换器将NSDate类转换成可以输出的字符串. NSString *currentDateStr = [dateFormatter stringFromDate:currentDate]; NSLog(@"当前的时间: %@",currentDateStr);
输出:
需求2.用下面格式输出时间:
- 刚刚(一分钟内)
- X分钟前(一小时内)
- X小时前(当天)
- 昨天 HH:mm(昨天)
- MM-dd HH:mm(一年内)
- yyyy-MM-dd HH:mm(更早期)
1.写了一个分类NSDate+Formatter 继承自NSDate.
NSDate+Formatter.h 文件:
#import <Foundation/Foundation.h> @interface NSDate (Formatter) //1.获取系统当前时间 格式:2016-06-20 10:22:11 + (NSString *)dateCurrentTime; //2.将CurrentTime格式时间转换成系统默认的NSDate格式 + (NSDate *)dateConvertIntoNSDateWithCurrentTime:(NSString *)timeString; //3.将数据库时间和当前时间相比,得出时间差,根据下面要求输出. /* 刚刚(一分钟内) X分钟前(一小时内) X小时前(当天) 昨天 HH:mm(昨天) MM-dd HH:mm(一年内) yyyy-MM-dd HH:mm(更早期) */ + (NSString *)dateDescriptionWithDate:(NSDate *)date; @end
NSDate+Formatter.m文件:
// NSDate+Formatter.m // NSDate // // Created by 贾永强 on 16/6/20. // Copyright © 2016年 pandora. All rights reserved. // #import "NSDate+Formatter.h" @implementation NSDate (Formatter) //获取系统当前时间 格式:2016-06-20 10:22:11 + (NSString *)dateCurrentTime{ //1.用[NSDate date]可以获取系统当前时间 NSDate * currentDate = [NSDate date];//系统默认格式:2016-06-20 02:22:11 +0000 //2.实例化一个日期格式转换器 NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; //3.指定地区一定要指定,否则真机运行会有问题,统一用 en 即可 dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en"]; //4.设置输出格式 dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; //5.通过日期格式转换器将NSDate类转换成可以输出的字符串. NSString *currentDateStr = [dateFormatter stringFromDate:currentDate]; return currentDateStr; } //将CurrentTime格式时间转换成系统默认的NSDate格式 + (NSDate *)dateConvertIntoNSDateWithCurrentTime:(NSString *)timeString{ NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en"]; dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; NSDate *date = [dateFormatter dateFromString:timeString]; return date; } //将数据库时间和当前时间相比,得出时间差. + (NSString *)dateDescriptionWithDate:(NSDate *)date{ NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en"]; NSString *dateFormatterString = @" HH:mm"; // NSCalendar日历类,提供了非常丰富的日期转换函数 //1. 取出当前的日期 NSCalendar *currentCalendar = [NSCalendar currentCalendar]; //2. 用当前日期currentCalendar和传入的date比较,判断是否是今天 if ([currentCalendar isDateInToday:date]) { // 使用日期和当前的系统时间进行比较,判断相差的秒数 int seconds = CFDateGetTimeIntervalSinceDate((CFDateRef)[NSDate date], (CFDateRef)date); if(seconds < 60){ return @"刚刚"; }else if (seconds < 3600){ return [NSString stringWithFormat:@"%d 分钟前",seconds / 60]; }else{ return [NSString stringWithFormat:@"%d 小时前",seconds / 3600]; } } //3. 判断是否是昨天 if ([currentCalendar isDateInYesterday:date]){ NSString *tempString = @"昨天"; dateFormatterString = [tempString stringByAppendingString:dateFormatterString]; }else{ //4.比较函数,返回完整的自然年数. 当期日期和传入日期比较,如果时间间隔<1年,返回0. 0年<时间间隔<2年,返回1 .... NSDateComponents *dateComponents = [currentCalendar components:NSCalendarUnitYear fromDate:date toDate:[NSDate date]options:(NSCalendarWrapComponents)]; if (dateComponents.year == 0) {//时间间隔==0,说明是今年 dateFormatterString = @"MM-dd HH:mm"; }else{ dateFormatterString = @"yyyy-MM-dd HH:mm:ss"; } } dateFormatter.dateFormat =dateFormatterString; NSString *currentDateStr = [dateFormatter stringFromDate:date]; return currentDateStr; } @end