屬性
typedef NS_ENUM(NSInteger,NSFormattingContext){
NSFormattingContextUnknown = 0颠猴,
//根據(jù)集合{NSFormattingContextStandalone敷待,NSFormattingContextBeginningOfSentence淀散,NSFormattingContextMiddleOfSentence}動態(tài)確定大小寫上下文。
// 例如,如果將日期放在句子的開頭,則使用NSFormattingContextBeginningOfSentence自動格式化字符串。
//使用此上下文時盛泡,格式化程序?qū)⒎祷匾粋€string proxy,在大多數(shù)情況下娱颊,string proxy 的工作方式與普通字符串相同傲诵。
// 從格式化程序返回后,使用NSFormattingContextUnknown格式化字符串代理中的字符串箱硕。
//在stringWithFormat:中使用字符串代理時拴竹,我們可以確定%@的位置,然后相應(yīng)地設(shè)置上下文颅痊。
//在新的上下文中殖熟,字符串代理中的字符串將再次格式化,并放入從stringWithFormat:返回的最終字符串中斑响。
NSFormattingContextDynamic = 1菱属,
//大寫上下文,如果要使用適合于獨(dú)立使用的大寫字母來格式化日期或日期符號舰罚,例如日歷頁面上的獨(dú)立名稱纽门。
NSFormattingContextStandalone = 2
//如果要使用與列表或菜單項相對應(yīng)的大寫字母來格式化日期或日期符號,請使用大寫字母营罢。
NSFormattingContextListItem = 3赏陵,
//如果日期或日期符號要以適合句子開頭的大寫格式設(shè)置,則大寫上下文饲漾。
NSFormattingContextBeginningOfSentence = 4
//如果日期或日期符號要以適合句子中間的大寫格式設(shè)置蝙搔,則大寫上下文。
NSFormattingContextMiddleOfSentence = 5
}
/*
根據(jù)字符串的應(yīng)用場景和當(dāng)前語言環(huán)境考传,來決定如何應(yīng)用大小寫
例如吃型,當(dāng)格式化法語語言環(huán)境的日期或日期符號時,
如果出現(xiàn)在句子的開頭 將月份名稱大寫(“ Juin est mon mois de naissance”)僚楞,
否則(“ Mon mois de naissance est juin”)勤晚。
*/
@property NSFormattingContext formattingContext
typedef NS_ENUM(NSUInteger, NSDateFormatterStyle) { // date and time format styles
NSDateFormatterNoStyle = kCFDateFormatterNoStyle,
// 指定一種短樣式枉层,通常僅是數(shù)字,例如“ 11/23/37”或“ 3:30 PM”赐写。
NSDateFormatterShortStyle = kCFDateFormatterShortStyle,
// 指定一種中等樣式鸟蜡,通常帶有縮寫文本,例如“Nov 23, 1937” or “3:30:32 PM”.
NSDateFormatterMediumStyle = kCFDateFormatterMediumStyle,
// 指定一個長樣式挺邀,通常帶有全文揉忘,例如“November 23, 1937” or “3:30:32 PM PST”.
NSDateFormatterLongStyle = kCFDateFormatterLongStyle,
// 指定具有完整詳細(xì)信息的完整樣式,例如"Tuesday, April 12, 1952 AD” or “3:30:42 PM Pacific Standard Time”.
NSDateFormatterFullStyle = kCFDateFormatterFullStyle
};
typedef NS_ENUM(NSUInteger, NSDateFormatterBehavior) {
NSDateFormatterBehaviorDefault = 0,
#if TARGET_OS_OSX
NSDateFormatterBehavior10_0 = 1000,
#endif
NSDateFormatterBehavior10_4 = 1040,
};
// 日期格式字符串
@property (null_resettable, copy) NSString *dateFormat;
// 日期樣式和時間樣式,會反饋到dateFormat上
@property NSDateFormatterStyle dateStyle;
@property NSDateFormatterStyle timeStyle;
// 地區(qū)
@property (null_resettable, copy) NSLocale *locale;
// 是否生成不建議使用的日歷日期類型悠夯。暫時不知道什么用
@property BOOL generatesCalendarDates;
// 時區(qū)
@property (null_resettable, copy) NSTimeZone *timeZone;
// 日歷對象癌淮,暫時不知道什么用
@property (null_resettable, copy) NSCalendar *calendar;
// 允許如果時間不存在的話躺坟,可以獲取距離最近的整點(diǎn)時間沦补。比如說夏令時
@property (getter=isLenient) BOOL lenient;
/*
可以用兩位數(shù)字的年份指定符表示的最早日期。即當(dāng)傳進(jìn)來的字符串年是兩位數(shù)的時候咪橙,轉(zhuǎn)成NSDate夕膀,不會比這個日期小
如果被設(shè)置為 January 6, 1976, 那么 “January 1, 76” 被解釋為 New Year's Day in 2076, 而 “February 14, 76” 被解釋為 Valentine's Day in 1976.
默認(rèn)值是 December 31, 1949.
*/
@property (nullable, copy) NSDate *twoDigitStartDate;
//默認(rèn)日期,默認(rèn)值是nil
@property (nullable, copy) NSDate *defaultDate;
// 時代符號
// A.D.是“Anno Domini”[拉丁語]的縮寫,“公元”的意思美侦,現(xiàn)可用來表示公元后产舞。
// B.C.是 “before christ”〔英語〕的縮寫,意思是“主前,公元前”.
@property (null_resettable, copy) NSArray<NSString *> *eraSymbols;
// 月份符號 January, February, March, April, May, June, July, August, September, October, November, December
@property (null_resettable, copy) NSArray<NSString *> *monthSymbols;
// 簡單的月份符號 Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
@property (null_resettable, copy) NSArray<NSString *> *shortMonthSymbols;
// 周符號 Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
@property (null_resettable, copy) NSArray<NSString *> *weekdaySymbols;
// 簡單的周符號 Sun, Mon, Tue, Wed, Thu, Fri, Sat
@property (null_resettable, copy) NSArray<NSString *> *shortWeekdaySymbols;
//am符號
@property (null_resettable, copy) NSString *AMSymbol;
// pm符號
@property (null_resettable, copy) NSString *PMSymbol;
// 長的紀(jì)元符號 "Before Christ" "Anno Domini"
@property (null_resettable, copy) NSArray<NSString *> *longEraSymbols
// 非常短的月份符號 J, F, M, A, M, J, J, A, S, O, N, D
@property (null_resettable, copy) NSArray<NSString *> *veryShortMonthSymbols
// 獨(dú)立月份符號 January, February, March, April, May, June, July, August, September, October, November, December
@property (null_resettable, copy) NSArray<NSString *> *standaloneMonthSymbols
// 接收器的短的獨(dú)立月份符號。 Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
@property (null_resettable, copy) NSArray<NSString *> *shortStandaloneMonthSymbols
// J, F, M, A, M, J, J, A, S, O, N, D
@property (null_resettable, copy) NSArray<NSString *> *veryShortStandaloneMonthSymbols
// 非常短的周符號 S, M, T, W, T, F, S
@property (null_resettable, copy) NSArray<NSString *> *veryShortWeekdaySymbols
// 周符號 Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
@property (null_resettable, copy) NSArray<NSString *> *standaloneWeekdaySymbols
// 簡單的周符號 Sun, Mon, Tue, Wed, Thu, Fri, Sat
@property (null_resettable, copy) NSArray<NSString *> *shortStandaloneWeekdaySymbols
// S, M, T, W, T, F, S
@property (null_resettable, copy) NSArray<NSString *> *veryShortStandaloneWeekdaySymbols
// 四分之一符號 "1st quarter", "2nd quarter", "3rd quarter", "4th quarter"
@property (null_resettable, copy) NSArray<NSString *> *quarterSymbols
// Q1, Q2, Q3, Q4
@property (null_resettable, copy) NSArray<NSString *> *shortQuarterSymbols
// 四分之一符號 "1st quarter", "2nd quarter", "3rd quarter", "4th quarter"
@property (null_resettable, copy) NSArray<NSString *> *standaloneQuarterSymbols
// Q1, Q2, Q3, Q4
@property (null_resettable, copy) NSArray<NSString *> *shortStandaloneQuarterSymbols
//公歷日歷的開始日期菠剩。 1582-10-15T08:05:43+08:05:43
@property (nullable, copy) NSDate *gregorianStartDate
//一個布爾值易猫,指示接收者是否將諸如“ today”和“明天”之類的短語用作日期部分。
@property BOOL doesRelativeDateFormatting
方法
/*
判斷字符串能否被當(dāng)前的dateFormatter解析
obj
如果能夠解析字符串具壮,返回NSDate對象
string
要解析的字符串准颓。
rangep
傳進(jìn)去要解析的范圍,如果能解析字符串棺妓,則返回時解析的字符串范圍攘已。
*/
- (BOOL)getObjectValue:(out id _Nullable * _Nullable)obj forString:(NSString *)string range:(inout nullable NSRange *)rangep error:(out NSError **)error;
// 字符串和NSDate相互轉(zhuǎn)換的方法
- (NSString *)stringFromDate:(NSDate *)date;
- (nullable NSDate *)dateFromString:(NSString *)string;
// 快速格式化字符串
+ (NSString *)localizedStringFromDate:(NSDate *)date dateStyle:(NSDateFormatterStyle)dstyle timeStyle:(NSDateFormatterStyle)tstyle
// 根據(jù)模板返回dateFormat
/*
不同的語言環(huán)境對日期組件的排序有不同的約定。使用此方法為指定語言環(huán)境的一組給定組件獲取適當(dāng)?shù)母袷阶址?示例:英式英語和美式英語的日期格式差異:
NSLocale * usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@“ en_US”];
NSLocale * gbLocale = [[NSLocale alloc] initWithLocaleIdentifier:@“ en_GB”];
NSString * template = @“ yMMMMd”;
NSString * enDateFormat = [NSDateFormatter dateFormatFromTemplate:template options:0 locale:usLocale];
NSLog(@“日期格式為%@:%@”怜跑,
[usLocale displayNameForKey:NSLocaleIdentifier value:[usLocale localeIdentifier]]样勃,enDateFormat);
NSString * gbDateFormat = [NSDateFormatter dateFormatFromTemplate:template options:0 locale:gbLocale];
NSLog(@“日期格式為%@:%@”,
[gbLocale displayNameForKey:NSLocaleIdentifier值:[gbLocale localeIdentifier]]性芬,gbDateFormat)峡眶;
// 輸出:
//英文(美國)的日期格式:MMMM d,y
//英文(英國)的日期格式:d MMMM y
參數(shù)
*/
+ (nullable NSString *)dateFormatFromTemplate:(NSString *)tmplate options:(NSUInteger)opts locale:(nullable NSLocale *)locale
/*
等效于植锉,但不一定實(shí)現(xiàn)為:
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:dateFormatTemplate選項:0區(qū)域設(shè)置:formatter.locale]辫樱;
*/
- (void) setLocalizedDateFormatFromTemplate:(NSString *)dateFormatTemplate