NSDateFormatter类的使用(持续更新)

本文详细介绍如何使用NSDateFormatter将NSDate对象转换为指定格式的字符串,并列举了常用的日期格式符号及NSDateFormatterStyle样式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们知道.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 = kCFDateFormatterShortStyle5/10/18日期数字表示,有缩写(比如05日缩写成了5)
NSDateFormatterMediumStyle = kCFDateFormatterMediumStyleSep 3, 2018月份使用英文缩写表示
NSDateFormatterLongStyle = kCFDateFormatterLongStyleSeptember 3, 2018月份使用英文全称表示
NSDateFormatterFullStyle = kCFDateFormatterFullStyleThursday, May 10, 2018星期,月份使用英文全称表示

timeType:

timeType输出例子说明
NSDateFormatterNoStyle = kCFDateFormatterNoStyle无输出
NSDateFormatterShortStyle = kCFDateFormatterShortStyle7:48 AM缩写显示时:分,AM/PM表示上下午
NSDateFormatterMediumStyle = kCFDateFormatterMediumStyle7:50:03 AM缩写显示时:分:秒 AM/PM表示上下午
NSDateFormatterLongStyle = kCFDateFormatterLongStyle7:53:44 AM GMT+8缩写表示时:分:秒 AM/PM表示上下午 GMTXXX表示时区
NSDateFormatterFullStyle = kCFDateFormatterFullStyle7:54:57 AM China Standard Time缩写表示时:分:秒 AM/PM表示上下午 时区的详细说明

locale
locale是NSLocale类的对象.是一个本地化信息的类.举个例子,如果要dateFormatter格式化成中国区的话:

	dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];

其他的就不多讲了.准备下次开一个NSLocale专门来讲.


更新到NSLocale

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值