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<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;
// 长的纪元符号    "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
// 独立月份符号 January,    February,    March,    April,    May,    June,    July,    August,    September,    October,    November,    December
@property (null_resettable, copy) NSArray<NSString *> *standaloneMonthSymbols
// 接收器的短的独立月份符号。  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

方法

/*
判断字符串能否被当前的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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容