NSDateFormatter

屬性

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
    //如果要使用與列表或菜單項(xiàng)相對應(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選項(xiàng):0區(qū)域設(shè)置:formatter.locale];
*/
- (void) setLocalizedDateFormatFromTemplate:(NSString *)dateFormatTemplate
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容