我们知道.NSDate是Apple提供的一个时间类.
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSDate *date = [NSDate date];
NSLog(@"%@",date);
}
打印出来的是详细的时间
2018-05-09 09:57:02.550517+0800 NSDateFormatter[2186:80673] Wed May 9 09:57:02 2018
2018-05-09 09:57:32.438761+0800 NSDateFormatter[2186:80673] Wed May 9 09:57:32 2018
2018-05-09 09:57:32.833065+0800 NSDateFormatter[2186:80673] Wed May 9 09:57:32 2018
2018-05-09 09:57:32.990410+0800 NSDateFormatter[2186:80673] Wed May 9 09:57:32 2018
2018-05-09 09:57:33.486141+0800 NSDateFormatter[2186:80673] Wed May 9 09:57:33 2018
2018-05-09 09:57:33.632087+0800 NSDateFormatter[2186:80673] Wed May 9 09:57:33 2018
2018-05-09 09:57:33.777887+0800 NSDateFormatter[2186:80673] Wed May 9 09:57:33 2018
如果我我们想把NSDate转换为字符串,缺找不到对应方法.那么,这是怎么回事呢.
我们知道不同编程语言中的Date类型都有不同的表示方法,有些可能单个语言都有不同的表示方法,所以苹果提供了一个NSDateFormatter类来"格式化"NSDate对象.
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSDate *date = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSString *dateStr = [dateFormatter stringFromDate:date];
NSLog(@"%@",dateStr);
}
对应的输出如下
2018-05-09 10:02:13.702687+0800 NSDateFormatter[2304:93609]
2018-05-09 10:02:15.341365+0800 NSDateFormatter[2304:93609]
2018-05-09 10:02:15.567911+0800 NSDateFormatter[2304:93609]
2018-05-09 10:02:23.036652+0800 NSDateFormatter[2304:93609]
2018-05-09 10:02:23.464046+0800 NSDateFormatter[2304:93609]
骚等一下,为什么输出结果反而没有了呢.
因为我们并没有指定输出格式.
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSDate *date = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//指定输出格式
dateFormatter.dateFormat = @"HH:mm:ss";
NSString *dateStr = [dateFormatter stringFromDate:date];
NSLog(@"%@",dateStr);
}
这时输出的格式就是时:分:秒
2018-05-09 10:04:05.800347+0800 NSDateFormatter[2351:98863] 10:04:05
2018-05-09 10:04:05.955048+0800 NSDateFormatter[2351:98863] 10:04:05
2018-05-09 10:04:06.113284+0800 NSDateFormatter[2351:98863] 10:04:06
2018-05-09 10:04:06.281311+0800 NSDateFormatter[2351:98863] 10:04:06
2018-05-09 10:04:06.562441+0800 NSDateFormatter[2351:98863] 10:04:06
2018-05-09 10:04:06.742655+0800 NSDateFormatter[2351:98863] 10:04:06
dateFormat
符号 | 意义 | 例 |
---|---|---|
YYYY | 年份(完整的年) | 2012 |
YY | 年份(部分,年的后面的2位数字) | 12 |
MMMM | 月份(英文完整的月份的表示 | October |
MMM | 月份(英文月份的缩写) | Jan |
MM | 月份(完整月份的数字表示) | 01,10 |
M | 月份(不完整月份的数字表示,1位或者2位) | 1,11 |
dd | 日期(完整的日期表示) | 01,12 |
d | 日期(不完整的日期表示) | 1,12 |
EEEE | 完整的星期的英文表示 | Sunday |
EEE | 英文星期的缩写 | Sun |
aa | 上午/下午的表示 | AM/PM |
HH | 小时的完整表示(24小时制) | 02,12 |
H | 小时的不完整表示(24小时制) | 2,12 |
KK/hh | 小时的完整表示(12小时制) | 02,12 |
K/h | 小时的不完整表示(12小时制) | 2,12 |
mm | 分钟的完整表示 | 02,12 |
m | 分钟的不完整表示 | 2,12 |
ss | 完整的秒数显示 | 09,10 |
s | 不完整的秒数显示 | 1,12 |
S | 显示毫秒,注意是大写的 |
注:上面列出的所有的不完整显示都是前位为0的省略
举个例子.dateformatter.dateFormat = @“YYYY:MM:dd”;
那么[dateformatter stringFromDate:date]转换出来的就是2018:05:11这种.
NSDateFormatterStyle:
dateType:
dateType | 输出例子 | 说明 |
---|---|---|
NSDateFormatterNoStyle = kCFDateFormatterNoStyle | 无输出.相当于xxx.dateFormat = @""; | |
NSDateFormatterShortStyle = kCFDateFormatterShortStyle | 5/10/18 | 日期数字表示,有缩写(比如05日缩写成了5) |
NSDateFormatterMediumStyle = kCFDateFormatterMediumStyle | Sep 3, 2018 | 月份使用英文缩写表示 |
NSDateFormatterLongStyle = kCFDateFormatterLongStyle | September 3, 2018 | 月份使用英文全称表示 |
NSDateFormatterFullStyle = kCFDateFormatterFullStyle | Thursday, May 10, 2018 | 星期,月份使用英文全称表示 |
timeType:
timeType | 输出例子 | 说明 |
---|---|---|
NSDateFormatterNoStyle = kCFDateFormatterNoStyle | 无输出 | |
NSDateFormatterShortStyle = kCFDateFormatterShortStyle | 7:48 AM | 缩写显示时:分,AM/PM表示上下午 |
NSDateFormatterMediumStyle = kCFDateFormatterMediumStyle | 7:50:03 AM | 缩写显示时:分:秒 AM/PM表示上下午 |
NSDateFormatterLongStyle = kCFDateFormatterLongStyle | 7:53:44 AM GMT+8 | 缩写表示时:分:秒 AM/PM表示上下午 GMTXXX表示时区 |
NSDateFormatterFullStyle = kCFDateFormatterFullStyle | 7:54:57 AM China Standard Time | 缩写表示时:分:秒 AM/PM表示上下午 时区的详细说明 |
locale
locale是NSLocale类的对象.是一个本地化信息的类.举个例子,如果要dateFormatter格式化成中国区的话:
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
其他的就不多讲了.准备下次开一个NSLocale专门来讲.
更新到NSLocale