NSDateFormatter

属性

typedef NS_ENUM(NSInteger,NSFormattingContext){
    NSFormattingContextUnknown = 0,
    //根据集合{NSFormattingContextStandalone,NSFormattingContextBeginningOfSentence,NSFormattingContextMiddleOfSentence}动态确定大小写上下文。
    // 例如,如果将日期放在句子的开头,则使用NSFormattingContextBeginningOfSentence自动格式化字符串。
    //使用此上下文时,格式化程序将返回一个string proxy,在大多数情况下,string proxy 的工作方式与普通字符串相同。
    // 从格式化程序返回后,使用NSFormattingContextUnknown格式化字符串代理中的字符串。
    //在stringWithFormat:中使用字符串代理时,我们可以确定%@的位置,然后相应地设置上下文。
    //在新的上下文中,字符串代理中的字符串将再次格式化,并放入从stringWithFormat:返回的最终字符串中。
    NSFormattingContextDynamic = 1,
    //大写上下文,如果要使用适合于独立使用的大写字母来格式化日期或日期符号,例如日历页面上的独立名称。
    NSFormattingContextStandalone = 2
    //如果要使用与列表或菜单项相对应的大写字母来格式化日期或日期符号,请使用大写字母。
    NSFormattingContextListItem = 3,
    //如果日期或日期符号要以适合句子开头的大写格式设置,则大写上下文。
    NSFormattingContextBeginningOfSentence = 4
    //如果日期或日期符号要以适合句子中间的大写格式设置,则大写上下文。
    NSFormattingContextMiddleOfSentence = 5 
}
/*
根据字符串的应用场景和当前语言环境,来决定如何应用大小写
例如,当格式化法语语言环境的日期或日期符号时,
如果出现在句子的开头 将月份名称大写(“ 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,
// 指定一种短样式,通常仅是数字,例如“ 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,
// 指定具有完整详细信息的完整样式,例如"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;
// 地区
@property (null_resettable, copy) NSLocale *locale;
// 是否生成不建议使用的日历日期类型。暂时不知道什么用
@property BOOL generatesCalendarDates;
// 时区
@property (null_resettable, copy) NSTimeZone *timeZone;
// 日历对象,暂时不知道什么用
@property (null_resettable, copy) NSCalendar *calendar;
// 允许如果时间不存在的话,可以获取距离最近的整点时间。比如说夏令时
@property (getter=isLenient) BOOL lenient;
/*
可以用两位数字的年份指定符表示的最早日期。即当传进来的字符串年是两位数的时候,转成NSDate,不会比这个日期小
如果被设置为 January 6, 1976, 那么 “January 1, 76” 被解释为 New Year's Day in 2076, 而 “February 14, 76” 被解释为 Valentine's Day in 1976.
默认值是 December 31, 1949.
*/
@property (nullable, copy) NSDate *twoDigitStartDate;
//默认日期,默认值是nil
@property (nullable, copy) NSDate *defaultDate;
// 时代符号
// A.D.是“Anno Domini”[拉丁语]的缩写,“公元”的意思,现可用来表示公元后。
// B.C.是 “before christ”〔英语〕的缩写,意思是“主前,公元前”.
@property (null_resettable, copy) NSArray *eraSymbols;
// 月份符号    January,    February,    March,    April,    May,    June,    July,    August,    September,    October,    November,    December
@property (null_resettable, copy) NSArray *monthSymbols;
// 简单的月份符号    Jan,    Feb,    Mar,    Apr,    May,    Jun,    Jul,    Aug,    Sep,    Oct,    Nov,    Dec
@property (null_resettable, copy) NSArray *shortMonthSymbols;
//  周符号 Sunday,    Monday,    Tuesday,    Wednesday,    Thursday,    Friday,    Saturday
@property (null_resettable, copy) NSArray *weekdaySymbols;
// 简单的周符号   Sun,    Mon,    Tue,    Wed,    Thu,    Fri,    Sat
@property (null_resettable, copy) NSArray *shortWeekdaySymbols;

//am符号
@property (null_resettable, copy) NSString *AMSymbol;
// pm符号
@property (null_resettable, copy) NSString *PMSymbol;
// 长的纪元符号    "Before Christ"   "Anno Domini"
@property (null_resettable, copy) NSArray *longEraSymbols
// 非常短的月份符号 J,    F,    M,    A,    M,    J,    J,    A,    S,    O,    N,    D
@property (null_resettable, copy) NSArray *veryShortMonthSymbols
// 独立月份符号 January,    February,    March,    April,    May,    June,    July,    August,    September,    October,    November,    December
@property (null_resettable, copy) NSArray *standaloneMonthSymbols
// 接收器的短的独立月份符号。  Jan,    Feb,    Mar,    Apr,    May,    Jun,    Jul,    Aug,    Sep,    Oct,    Nov,    Dec
@property (null_resettable, copy) NSArray *shortStandaloneMonthSymbols
// J,    F,    M,    A,    M,    J,    J,    A,    S,    O,    N,    D
@property (null_resettable, copy) NSArray *veryShortStandaloneMonthSymbols
// 非常短的周符号   S,    M,    T,    W,    T,    F,    S
@property (null_resettable, copy) NSArray *veryShortWeekdaySymbols
//  周符号 Sunday,    Monday,    Tuesday,    Wednesday,    Thursday,    Friday,    Saturday
@property (null_resettable, copy) NSArray *standaloneWeekdaySymbols 
// 简单的周符号   Sun,    Mon,    Tue,    Wed,    Thu,    Fri,    Sat
@property (null_resettable, copy) NSArray *shortStandaloneWeekdaySymbols
// S,    M,    T,    W,    T,    F,    S
@property (null_resettable, copy) NSArray *veryShortStandaloneWeekdaySymbols 
// 四分之一符号 "1st quarter",    "2nd quarter",    "3rd quarter",    "4th quarter"
@property (null_resettable, copy) NSArray *quarterSymbols 
//   Q1,    Q2,    Q3,    Q4
@property (null_resettable, copy) NSArray *shortQuarterSymbols 
// 四分之一符号 "1st quarter",    "2nd quarter",    "3rd quarter",    "4th quarter"
@property (null_resettable, copy) NSArray *standaloneQuarterSymbols 
//   Q1,    Q2,    Q3,    Q4
@property (null_resettable, copy) NSArray *shortStandaloneQuarterSymbols
//公历日历的开始日期。 1582-10-15T08:05:43+08:05:43
@property (nullable, copy) NSDate *gregorianStartDate
//一个布尔值,指示接收者是否将诸如“ today”和“明天”之类的短语用作日期部分。
@property BOOL doesRelativeDateFormatting

方法

/*
判断字符串能否被当前的dateFormatter解析
obj
如果能够解析字符串,返回NSDate对象
string
要解析的字符串。
rangep
传进去要解析的范围,如果能解析字符串,则返回时解析的字符串范围。
*/
- (BOOL)getObjectValue:(out id _Nullable * _Nullable)obj forString:(NSString *)string range:(inout nullable NSRange *)rangep error:(out NSError **)error;
// 字符串和NSDate相互转换的方法
- (NSString *)stringFromDate:(NSDate *)date;
- (nullable NSDate *)dateFromString:(NSString *)string;
// 快速格式化字符串
+ (NSString *)localizedStringFromDate:(NSDate *)date dateStyle:(NSDateFormatterStyle)dstyle timeStyle:(NSDateFormatterStyle)tstyle

// 根据模板返回dateFormat
/*
不同的语言环境对日期组件的排序有不同的约定。使用此方法为指定语言环境的一组给定组件获取适当的格式字符串
示例:英式英语和美式英语的日期格式差异:
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
参数
*/
+ (nullable NSString *)dateFormatFromTemplate:(NSString *)tmplate options:(NSUInteger)opts locale:(nullable NSLocale *)locale

/*
等效于,但不一定实现为:
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:dateFormatTemplate选项:0区域设置:formatter.locale];
*/
- (void) setLocalizedDateFormatFromTemplate:(NSString *)dateFormatTemplate

你可能感兴趣的:(NSDateFormatter)