Objective-C中的日期格式器NSDateFormatter

NSDateFormatter代表一个日期格式器,它的功能就是完成NSDate与NSString之间的转换。

使用NSDateFormatter完成NSDate与NSString之间转换的步骤如下:

1. 创建一个NSDateFormatter对象

2. 调用NSDateFormatter的setDateStyle:,setTimeStyle:方法设置格式化日期,时间的风格。

其中,日期,时间风格支持如下几个枚举值。

NSDateFormatterNoStyle:不显示日期,时间的风格。

NSDateFormatterShortStyle:显示短的日期,时间风格

NSDateFormatterMediumStyle:显示中等的日期,时间风格

NSDateFormatterLongStyle:显示长的日期,时间风格

NSDateFormatterFullStyle:显示完整的日期,时间风格

如果打算使用自定义的格式模版,可以调用NSDateFormatter的setDateFormatter:方法设置日期,时间的模版即可。

3.如果需要将NSDate转换为NSString,调用NSDateFormatter的stringFromDate:方法执行格式化即可;

如果需要将NSString转换为NSDate,调用NSDateFormatter的dateFromString:方法执行格式化即可。

如下程序示范来NSDateFormatter的功能和用法.

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        //需要被格式化的时间为从1970年1.1开始,20年后的日期
        NSDate* dt = [NSDate dateWithTimeIntervalSince1970:20*366*24*3600];
        //创建两个NSLocale,分别代表中国,美国
        NSLocale* locales[] = {[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"],
                                [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]};
        NSDateFormatter* df[8];
        //为上面两个NSLocale创建8个DateFormat对象
        for (int i=0; i<2; i++) {
            df[i * 4] = [[NSDateFormatter alloc] init];
            //设置NSDateFormatter的日期,时间风格
            [df[i * 4] setDateStyle:NSDateFormatterShortStyle];
            [df[i * 4] setTimeStyle:NSDateFormatterShortStyle];
            //设置NSDateFormatter的NSLocale
            [df[i * 4] setLocale:locales[i]];
            
            df[i * 4 + 1] = [[NSDateFormatter alloc] init];
            //设置NSDateFormatter的日期,时间风格
            [df[i * 4 + 1] setDateStyle:NSDateFormatterMediumStyle];
            [df[i * 4 + 1] setTimeStyle:NSDateFormatterMediumStyle];
            //设置NSDateFormatter的NSLocale
            [df[i * 4 + 1] setLocale:locales[i]];
            
            df[i * 4 + 2] = [[NSDateFormatter alloc] init];
            //设置NSDateFormatter的日期,时间风格
            [df[i * 4 + 2] setDateStyle:NSDateFormatterLongStyle];
            [df[i * 4 + 2] setTimeStyle:NSDateFormatterLongStyle];
            //设置NSDateFormatter的NSLocale
            [df[i * 4 + 2] setLocale:locales[i]];
            
            df[i * 4 + 3] = [[NSDateFormatter alloc] init];
            //设置NSDateFormatter的日期,时间风格
            [df[i * 4 + 3] setDateStyle:NSDateFormatterFullStyle];
            [df[i * 4 + 3] setTimeStyle:NSDateFormatterFullStyle];
            //设置NSDateFormatter的NSLocale
            [df[i * 4 + 3] setLocale:locales[i]];
        }
        
        for (int i=0; i<2; i++) {
            switch (i) {
                case 0:
                    NSLog(@"----------中国日期格式----------");
                    break;
                case 1:
                    NSLog(@"----------美国日期格式----------");
                    break;
                
            }
            NSLog(@"SHORT格式的日期格式:%@",[df[i * 4] stringFromDate:dt]);
            NSLog(@"MEDIUM格式的日期格式:%@",[df[i * 4 + 1] stringFromDate:dt]);
            NSLog(@"LONG格式的日期格式:%@",[df[i * 4 + 2] stringFromDate:dt]);
            NSLog(@"FULL格式的日期格式:%@",[df[i * 4 + 3] stringFromDate:dt]);
        }
        
        NSDateFormatter* df2 = [[NSDateFormatter alloc] init];
        //设置自定义的格式器模版
        [df2 setDateFormat:@"公元yyyy年MM月DD日 HH时mm分"];
        //执行格式化
        NSLog(@"%@",[df2 stringFromDate:dt]);
        
        NSString* dateStr = @"2013-03-12";
        NSDateFormatter* df3 = [[NSDateFormatter alloc] init];
        //根据日期字符串的格式设置格式模版
        [df3 setDateFormat:@"yyyy-MM-dd"];
        //将字符串转换为NSDate对象
        NSDate* date2 = [df3 dateFromString:dateStr];
        NSLog(@"%@",date2);
        
        
        
        
        
    }
    return 0;
}

其打印日志如下:

2014-08-26 22:36:42.465 NSDateFormatterTest[466:303] ----------中国日期格式----------

2014-08-26 22:36:42.467 NSDateFormatterTest[466:303] SHORT格式的日期格式:90-1-16 上午8:00

2014-08-26 22:36:42.467 NSDateFormatterTest[466:303] MEDIUM格式的日期格式:1990116 上午8:00:00

2014-08-26 22:36:42.468 NSDateFormatterTest[466:303] LONG格式的日期格式:1990116 GMT+8上午8:00:00

2014-08-26 22:36:42.469 NSDateFormatterTest[466:303] FULL格式的日期格式:1990116 星期二 中国标准时间上午8:00:00

2014-08-26 22:36:42.469 NSDateFormatterTest[466:303] ----------美国日期格式----------

2014-08-26 22:36:42.470 NSDateFormatterTest[466:303] SHORT格式的日期格式:1/16/90, 8:00 AM

2014-08-26 22:36:42.470 NSDateFormatterTest[466:303] MEDIUM格式的日期格式:Jan 16, 1990, 8:00:00 AM

2014-08-26 22:36:42.471 NSDateFormatterTest[466:303] LONG格式的日期格式:January 16, 1990 at 8:00:00 AM GMT+8

2014-08-26 22:36:42.471 NSDateFormatterTest[466:303] FULL格式的日期格式:Tuesday, January 16, 1990 at 8:00:00 AM China Standard Time

2014-08-26 22:36:42.475 NSDateFormatterTest[466:303] 公元19900116 0800

2014-08-26 22:36:42.476 NSDateFormatterTest[466:303] 2013-03-11 16:00:00 +0000

Program ended with exit code: 0



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值