前言:iOS开发中NSDateFormatter是一个很常用的类,用于格式化NSDate对象,支持本地化的信息。与时间相关的功能还可能会用到NSDateComponents类和NSCalendar类等。本文主要列出NSDateFormatter常见用法。
1、基础用法
1 NSDate* now = [NSDate date]; 2 NSDateFormatter* fmt = [[NSDateFormatter alloc] init]; 3 fmt.dateStyle = kCFDateFormatterShortStyle; 4 fmt.timeStyle = kCFDateFormatterShortSty le; 5 fmt.locale = [[NSLocale alloc] initWithLocaleIdentifier :@"en_US"]; 6 NSString* dateString = [fmt stringFromDate:now]; 7 NSLog(@"%@", dateString);
打印输出:10/29/12, 2:27 PM
这使用的系统提供的格式化字符串,通过
typedef CF_ENUM(CFIndex, CFDateFormatterStyle) { // date and time format styles kCFDateFormatterNoStyle = 0, // 无输出 kCFDateFormatterShortStyle = 1, // 10/29/12, 2:27 PM kCFDateFormatterMediumSt yle = 2, // Oct 29, 2012, 2:36:59 PM kCFDateFormatterLongStyl e = 3, // October 29, 2012, 2:38:46 PM GMT+08:00 kCFDateFormatterFullStyl e = 4 // Monday, October 29, 2012, 2:39:56 PM China Standard Time };
2. 自定义区域语言
如上实例中,我们使用的是区域语言是
1 fmt.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
typedef CF_ENUM(CFIndex, CFDateFormatterStyle) { // date and time format styles kCFDateFormatterNoStyle = 0, // 无输出 kCFDateFormatterShortStyle = 1, // 12-10-29 下午2:52 kCFDateFormatterMediumSt yle = 2, // 2012-10-29 下午2:51:43 kCFDateFormatterLongStyl e = 3, // 2012年10月29日 GMT+0800下午2时51分08秒 kCFDateFormatterFullStyl e = 4 // 2012年10月29日星期一 中国标准时间下午2时46分49秒 };
世界通用的区域语言代码,详见
3. 自定义日期时间格式
NSDateFormatter提供了自定义日期时间的方法,主要是通过设置属性
1 NSDate* now = [NSDate date]; 2 NSDateFormatter* fmt = [[NSDateFormatter alloc] init]; 3 fmt.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"]; 4 fmt.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss"; 5 NSString* dateString = [fmt stringFromDate:now]; 6 NSLog(@"%@", dateString);
打印输出:2012-10-29T16:08:40
除了上面列出的,还可以指定很多格式,详见http://userguide.icu-project.org/formatparse/datetime。
结合设置Locale,还可以打印出本地化的字符串信息。
1 NSDate* now = [NSDate date]; 2 NSDateFormatter* fmt = [[NSDateFormatter alloc] init]; 3 fmt.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"]; 4 fmt.dateFormat = @"yyyy-MM-dd a HH:mm:ss EEEE"; 5 NSString* dateString = [fmt stringFromDate:now]; 6 NSLog(@"\n%@", dateString);
打印输出:2012-10-29 下午 16:25:27 星期一
4. 自定义月份星期等字符
NSDateFormatter中同样提供了相应的方式,去修改这些字符。一般情况下,使用相应区域语言下面的默认字符就OK了。但是你的确有这个需求,那么也是可以办到的。相应的方法非常多,如下:
Managing AM and PM Symbols
- –
AMSymbol - –
setAMSymbol: - –
PMSymbol - –
setPMSymbol:
Managing Weekday Symbols
- –
weekdaySymbols - –
setWeekdaySymbols: - –
shortWeekdaySymbols - –
setShortWeekdaySymbols: - –
veryShortWeekdaySymbols - –
setVeryShortWeekdaySymbo ls: - –
standaloneWeekdaySymbols - –
setStandaloneWeekdaySymb ols: - –
shortStandaloneWeekdaySy mbols - –
setShortStandaloneWeekda ySymbols: - –
veryShortStandaloneWeekd aySymbols - –
setVeryShortStandaloneWe ekdaySymbols:
Managing Month Symbols
- –
monthSymbols - –
setMonthSymbols: - –
shortMonthSymbols - –
setShortMonthSymbols: - –
veryShortMonthSymbols - –
setVeryShortMonthSymbols : - –
standaloneMonthSymbols - –
setStandaloneMonthSymbol s: - –
shortStandaloneMonthSymb ols - –
setShortStandaloneMonthS ymbols: - –
veryShortStandaloneMonth Symbols - –
setVeryShortStandaloneMo nthSymbols:
Managing Quarter Symbols
- –
quarterSymbols - –
setQuarterSymbols: - –
shortQuarterSymbols - –
setShortQuarterSymbols: - –
standaloneQuarterSymbols - –
setStandaloneQuarterSymb ols: - –
shortStandaloneQuarterSy mbols - –
setShortStandaloneQuarte rSymbols:
Managing Era Symbols
- –
eraSymbols - –
setEraSymbols: - –
longEraSymbols - –
setLongEraSymbols: