/* FOUNDATION_EXPORT NSString * const NSCalendarIdentifierGregorian; //公曆(經常使用) FOUNDATION_EXPORT NSString * const NSCalendarIdentifierBuddhist; //佛教日曆 FOUNDATION_EXPORT NSString * const NSCalendarIdentifierChinese; //中國農曆(經常使用) FOUNDATION_EXPORT NSString * const NSCalendarIdentifierCoptic FOUNDATION_EXPORT NSString * const NSCalendarIdentifierEthiopicAmeteMihret // FOUNDATION_EXPORT NSString * const NSCalendarIdentifierEthiopicAmeteAlem // FOUNDATION_EXPORT NSString * const NSCalendarIdentifierHebrew; //希伯來日曆 FOUNDATION_EXPORT NSString * const NSCalendarIdentifierISO8601 //ISO8601(可是如今還不可用) FOUNDATION_EXPORT NSString * const NSCalendarIdentifierIndian //印度日曆 FOUNDATION_EXPORT NSString * const NSCalendarIdentifierIslamic //伊斯蘭曆 FOUNDATION_EXPORT NSString * const NSCalendarIdentifierIslamicCivil //伊斯蘭教日曆 FOUNDATION_EXPORT NSString * const NSCalendarIdentifierJapanese //日本日曆(和歷,經常使用) FOUNDATION_EXPORT NSString * const NSCalendarIdentifierPersian //波斯歷 FOUNDATION_EXPORT NSString * const NSCalendarIdentifierRepublicOfChina //中華民國日曆(臺灣) FOUNDATION_EXPORT NSString * const NSCalendarIdentifierIslamicTabular //伊斯蘭曆 FOUNDATION_EXPORT NSString * const NSCalendarIdentifierIslamicUmmAlQura */ //+ currentCalendar //取得當前用戶的邏輯日曆 //currentCalendar取得的值會一直保持在cache中,第一次取得之後若是用戶修改該系統日曆設定,這個值也不會改變。 NSCalendar *calendar = [NSCalendar currentCalendar]; NSLog(@"calendar = %@",calendar); //+ (id)autoupdatingCurrentCalendar //取得當前用戶的邏輯日曆 //用autoupdatingCurrentCalendar,那麼每次取得的值都會是當前系統設置的日曆的值。 NSCalendar *autoupdatingCurrent = [NSCalendar autoupdatingCurrentCalendar]; NSLog(@"autoupdatingCurrent = %@",autoupdatingCurrent); //- initWithCalendarIdentifier: //若是想要用公曆的時候,就要將NSDateFormatter的日曆設置成公曆。不然隨着用戶的系統設置的改變,取得的日期的格式也會不同。 NSCalendar *initCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian] ; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setCalendar:initCalendar]; // 這兩個類方法都將返回當前客戶端的邏輯日曆,區別在於:currentCalendar取得的值會一直保持在cache中,第一次用此方法實例化對象後,即便修改了系統日曆設定,這個對象也不會改變。而使用autoupdatingCurrentCalendar,當每次修改系統日曆設定,其實例化的對象也會隨之改變。 //NSCalendar經常使用對象方法與類方法: //1.- setFirstWeekday: //設置第一個工做日 //設定每週的第一天從星期幾開始,好比: //. 如需設定從星期日開始,則value傳入1 //. 如需設定從星期一開始,則value傳入2 //. 以此類推 [initCalendar setFirstWeekday:1]; //2.- (void)setLocale:(NSLocale *)locale [initCalendar setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"]]; NSLog(@"%@",initCalendar.locale.localeIdentifier); //– setLocale: //設置設置區域 [initCalendar setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] ]; //3.- (void)setTimeZone:(NSTimeZone *)tz //設置時區 [initCalendar setTimeZone:[NSTimeZone defaultTimeZone]]; //4. - (void)setMinimumDaysInFirstWeek:(NSUInteger)mdw //設定做爲(每一年及每個月)第一週必須包含的最少天數,好比:. 如需設定第一週最少包括7天,則value傳入7 //– setMinimumDaysInFirstWeek: [initCalendar setMinimumDaysInFirstWeek:7]; //-- Getting Information About a Calendar //5– calendarIdentifier //返回日曆標示符 NSString *calendarIdentifier = [initCalendar calendarIdentifier]; NSLog(@"calendarIdentifier = %@",calendarIdentifier); //– firstWeekday //返回日曆指定的每週的第一天從星期幾開始。缺省爲星期天,即firstWeekday = 1 NSUInteger firstWeekday = [initCalendar firstWeekday]; NSLog(@"firstWeekday = %lu",(unsigned long)firstWeekday); //6. - (NSUInteger)ordinalityOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date //– locale // 返回日曆指定的地區信息。 NSLocale *locale = [initCalendar locale]; NSLog(@"locale = %@",locale.localeIdentifier); //– maximumRangeOfUnit: //返回單元的最大範圍 //- minimumRangeOfUnit: //返回單元的最小範圍 NSRange range = [initCalendar maximumRangeOfUnit:NSCalendarUnitDay];//好比Day Calendar Unit就是一個月最多31天這個意思 NSLog(@"range = %lu",(unsigned long)range.length); // NSEraCalendarUnit -- 紀元單位。對於NSGregorianCalendar(公曆)來講,只有公元前(BC)和公元(AD);而對於其它曆法可能有不少,例如日本和歷是以每一代君王統治來作計算。 // NSYearCalendarUnit -- 年單位。值很大,至關於經歷了多少年,將來多少年。 // NSMonthCalendarUnit -- 月單位。範圍爲1-12 // NSDayCalendarUnit -- 天單位。範圍爲1-31 // NSHourCalendarUnit -- 小時單位。範圍爲0-24 // NSMinuteCalendarUnit -- 分鐘單位。範圍爲0-60 // NSSecondCalendarUnit -- 秒單位。範圍爲0-60 // NSWeekCalendarUnit -- 周單位。範圍爲1-53 // NSWeekdayCalendarUnit -- 星期單位,每週的7天。範圍爲1-7 // NSWeekdayOrdinalCalendarUnit -- 沒徹底搞清楚 // NSQuarterCalendarUnit -- 幾刻鐘,也就是15分鐘。範圍爲1-4 // NSWeekOfMonthCalendarUnit -- 月包含的週數。最多爲6個周 // NSWeekOfYearCalendarUnit -- 年包含的週數。最多爲53個周 // NSYearForWeekOfYearCalendarUnit -- 沒徹底搞清楚 // NSTimeZoneCalendarUnit -- 沒徹底搞清楚 // //- minimumDaysInFirstWeek //返回日曆指定的第一週必須包含的最少天數。 NSInteger minimumDays = [initCalendar minimumDaysInFirstWeek]; NSLog(@"minimumDays = %ld",(long)minimumDays); //- ordinalityOfUnit:inUnit:forDate: //在一個給定的時間,小日曆單元如(一天)在大日曆單元(一週)中的序數。 //好比forDate參數是星期一,並且firstWeekday 參數被設置爲2(也就是星期一爲一週的第一天),那麼返回爲1 //經過這個函數能夠判斷 例如 :給定的日期是在一週的第幾天,或一月的第幾周。一年的第幾個月。一年的第幾天等 //注:firstWeekday的設定會影響這個函數的返回值 NSInteger ordinality = [initCalendar ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitWeekOfMonth|NSCalendarUnitWeekOfYear forDate:[NSDate date]]; NSLog(@"ordinality = %ld",(long)ordinality); //- rangeOfUnit:inUnit:forDate: //一個小日曆單元下。大日曆單元的範圍 例如 小日曆單元是天。大日曆單元是周。那麼範圍就是7天。就是1-7 NSRange rangeOfUnit = [initCalendar rangeOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitWeekOfMonth|NSCalendarUnitWeekOfYear forDate:[NSDate date]]; NSLog(@"rangeOfUnit = %lu",(unsigned long)rangeOfUnit.length); //– rangeOfUnit:startDate:interval:forDate: //用於返回日期date(參數)所在的那個日曆單元unit(參數)的開始時間(sDate)。 //其中參數unit指定了日曆單元,參數sDate用於返回日曆單元的第一天,參數unitSecs用於返回日曆單元的長度(以秒爲單位),參數date指定了一個特定的日期。 //若是startDate和interval均爲可計算的,那麼函數返回YES不然返回NO.好比: NSDate *dateOut = [NSDate date]; //NSDate **sDate = &dateOut; NSDateComponents *dc = [[NSDateComponents alloc] init]; [dc setYear: 2013]; [dc setMonth: 4]; [dc setDay: 6]; NSDate *date = [calendar dateFromComponents:dc]; NSTimeInterval intOut; NSTimeInterval *intervalOut = &intOut; //7.- (BOOL)rangeOfUnit:(NSCalendarUnit)unit startDate:(NSDate **)datep interval:(NSTimeInterval *)tip forDate:(NSDate *)date //根據參數提供的時間點,返回所在日曆單位的開始時間。若是startDate和interval都可以計算,則返回YES;不然返回NOunit -- 日曆單位 datep -- 開始時間,經過參數返回 tip -- 日曆單位所對應的秒數,經過參數返回 date -- 時間點參數 if ([initCalendar rangeOfUnit:NSCalendarUnitWeekOfMonth|NSCalendarUnitWeekOfYear startDate:&dateOut interval:intervalOut forDate:date]){ NSLog(@"%@", [dateOut description]); NSLog(@"%f", *intervalOut/60/60/24); } else{ NSLog(@"Can not be calculated!"); } //- timeZone: //返回日曆指定的時區信息。 NSTimeZone *timeZone = [initCalendar timeZone]; NSLog(@"timeZone = %@",timeZone.abbreviation); //-- //-- Calendrical Calculations //- components:fromDate: //返回時間組件 unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay; NSDateComponents *comps = [initCalendar components:unitFlags fromDate:[NSDate date]]; NSLog(@"NSDateComponents - %ld",(long)comps.year); //- components:fromDate:toDate:options: //返回時間組件 比較2個日期 NSDate *startDate = date; NSDate *endDate = [NSDate date]; unsigned int unitFlags2 = NSCalendarUnitMonth | NSCalendarUnitDay; NSDateComponents *comps2 = [initCalendar components:unitFlags2 fromDate:startDate toDate:endDate options:0]; NSInteger months = [comps2 month]; NSInteger days = [comps2 day]; NSLog(@"months = %ld days = %ld",(long)months,(long)days); //- dateByAddingComponents:toDate:options: //追加日期 並返回一個新日期 // NSDate *currentDate = [NSDate date]; NSDateComponents *comps3 = [[NSDateComponents alloc] init]; [comps3 setMonth:2]; [comps3 setDay:3]; NSDate *newDate = [initCalendar dateByAddingComponents:comps3 toDate:currentDate options:0]; NSLog(@"newDate = %@",newDate);