您的位置:首页 > 移动开发 > IOS开发

iOS 官方文档 NSCalendar

2016-01-27 15:01 369 查看

一、系统区域信息

[NSCalendar currentCalendar]

[NSCalendar autoupdatingCurrentCalendar]

比如设定成「日本日历」的时候、currentCalendar的值是NSJapaneseCalendar

设定成「公历」的时候、currentCalendar的值是NSGregorianCalendar

注意:在程序中,currentCalendar取得的值会一直保持在cache中,第一次取得以后如果用户修改该系统日历设定,这个值也不会改变。如果用autoupdatingCurrentCalendar,那么每次取得的值都会是当前系统设置的日历的值。

三、获取日历的信息

1、calendarIdentifier

(1)方法原型

@property(readonly, copy) NSString *calendarIdentifier
//表示日历标识的字符串


2、firstWeekday

(1)方法原型

@property NSUInteger firstWeekday
//


3、locale

(1)方法原型

@property(copy) NSLocale *locale
//


4、- maximumRangeOfUnit:

(1)方法原型

- (NSRange)maximumRangeOfUnit:(NSCalendarUnit)unit
//返回unit范围的最大值


(2)实例代码

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];
NSRange range = [calendar maximumRangeOfUnit:NSCalendarUnitMonth];

NSLog(@"%@",NSStringFromRange(range));


2016-01-27 11:54:59.897 NSDate[3333:84233] {1, 12}

5、minimumDaysInFirstWeek

(1)方法原型

@property NSUInteger minimumDaysInFirstWeek
//


(2)实例代码

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];
NSInteger range = calendar.minimumDaysInFirstWeek;


2016-01-27 11:57:25.831 NSDate[3380:85745] 1

6、- minimumRangeOfUnit:

(1)方法原型

- (NSRange)minimumRangeOfUnit:(NSCalendarUnit)unitk
//返回unit范围的最小值


(2)实例代码

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];
NSRange range = [calendar minimumRangeOfUnit:NSCalendarUnitMonth];

NSLog(@"%@",NSStringFromRange(range));


2016-01-27 11:59:37.520 NSDate[3420:87291] {1, 12}

7、- ordinalityOfUnit:inUnit:forDate:

(1)方法原型

- (NSUInteger)ordinalityOfUnit:(NSCalendarUnit)smaller
inUnit:(NSCalendarUnit)larger
forDate:(NSDate *)date
//


8、- rangeOfUnit:inUnit:forDate:

(1)方法原型

- (NSRange)rangeOfUnit:(NSCalendarUnit)smaller
inUnit:(NSCalendarUnit)larger
forDate:(NSDate *)date
//返回unit的范围


(2)实例代码

NSDate *date = [NSDate date];
NSCalendar *calender = [NSCalendar currentCalendar];
NSRange range = [calender rangeOfUnit:NSCalendarUnitDay
inUnit:NSCalendarUnitMonth
forDate:date];
NSInteger a = range.length;
NSLog(@"%d",a);


2016-01-27 14:56:20.595 NSDate[5043:158073] 31

9、- rangeOfUnit:startDate:interval:forDate:

(1)方法原型

- (BOOL)rangeOfUnit:(NSCalendarUnit)unit
startDate:(NSDate * _Nullable *)datep
interval:(NSTimeInterval *)tip
forDate:(NSDate *)date


10、- rangeOfWeekendStartDate:interval:containingDate:

(1)方法原型

- (BOOL)rangeOfWeekendStartDate:(out NSDate * _Nullable *)datep
interval:(out NSTimeInterval *)tip
containingDate:(NSDate *)date


二、日期的计算

1、- dateByAddingComponents:toDate:options:

(1)方法原型

- (NSDate *)dateByAddingComponents:(NSDateComponents *)comps
toDate:(NSDate *)date
options:(NSCalendarOptions)opts
//计算几日或者几个月以后的日期


(2)实例代码

NSCalendar *gregorian = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierChinese];
NSDate *currentDate = [NSDate date];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setMonth:2];
[comps setDay:2];

NSDate *newDate = [gregorian dateByAddingComponents:comps toDate:currentDate  options:0];

NSLog(@"currentDate:%@",currentDate);
NSLog(@"newDate:%@",newDate);


NSDate[4762:179224] currentDate:2016-01-25 08:00:46 +0000

NSDate[4762:179224] newDate:2016-03-26 08:00:46 +0000

3、- dateFromComponents:

(1)方法原型

- (NSDate *)dateFromComponents:(NSDateComponents *)comps
//计算增加几天后新的日期


(2)实例代码

NSCalendar *calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierChinese];
NSDate *currentDate = [NSDate date];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setMonth:2];
[comps setDay:2];

NSDate *newDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:2 toDate:currentDate options:NSCalendarWrapComponents];

NSLog(@"currentDate:%@",currentDate);
NSLog(@"newDate:%@",newDate);


NSDate[4907:185010] currentDate:2016-01-25 08:11:37 +0000

NSDate[4907:185010] newDate:2016-01-27 08:11:37 +0000

2、- dateByAddingUnit:value:toDate:options:

(1)方法原型

- (NSDate *)dateByAddingUnit:(NSCalendarUnit)unit
value:(NSInteger)value
toDate:(NSDate *)date
options:(NSCalendarOptions)options
//计算增加几天后新的日期


(2)实例代码

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:1965];
[comps setMonth:1];
[comps setDay:6];
[comps setHour:14];
[comps setMinute:10];
[comps setSecond:0];
NSDate *date = [calendar dateFromComponents:comps];

NSLog(@"date:%@",date);


NSDate[5345:197061] date:3948-01-29 06:10:00 +0000

三、日期的比较

1 、- compareDate:toDate:toUnitGranularity:

(1)方法原型

- (NSComparisonResult)compareDate:(NSDate *)date1
toDate:(NSDate *)date2
toUnitGranularity:(NSCalendarUnit)unit
// 比较两个日期指定unit的大小


(2)实例代码

NSDate *date1 = [NSDate date];
NSDate *date2 = [[NSDate alloc] initWithTimeInterval:10 sinceDate:date1];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];
NSComparisonResult result = [calendar compareDate:date1 toDate:date2 toUnitGranularity:NSCalendarUnitSecond];
NSLog(@"date1:%@",date1);
NSLog(@"date2:%@",date2);
NSLog(@"result:%d",result);


2016-01-25 16:51:29.105 NSDate[5613:205775] date1:2016-01-25 08:51:29 +0000

2016-01-25 16:51:29.105 NSDate[5613:205775] date2:2016-01-25 08:51:39 +0000

2016-01-25 16:51:29.106 NSDate[5613:205775] result:-1

2 、- isDate:equalToDate:toUnitGranularity:

(1)方法原型

- (BOOL)isDate:(NSDate *)date1
equalToDate:(NSDate *)date2
toUnitGranularity:(NSCalendarUnit)unit
// 比较两个日期指定的unit是否相等


(2)实例代码

NSDate *date1 = [NSDate date];
NSDate *date2 = [[NSDate alloc] initWithTimeInterval:10 sinceDate:date1];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];
BOOL result = [calendar isDate:date1 equalToDate:date2 toUnitGranularity:NSCalendarUnitSecond];
NSLog(@"date1:%@",date1);
NSLog(@"date2:%@",date2);
NSLog(@"result:%d",result);


2016-01-25 17:03:50.600 NSDate[5776:211291] date1:2016-01-25 09:03:50 +0000

2016-01-25 17:03:50.600 NSDate[5776:211291] date2:2016-01-25 09:04:00 +0000

2016-01-25 17:03:50.600 NSDate[5776:211291] result:0

3 、- isDate:inSameDayAsDate:

(1)方法原型

- (BOOL)isDate:(NSDate *)date1
inSameDayAsDate:(NSDate *)date2
// 比较两个日期是否为同一日


(2)实例代码

NSDate *date1 = [NSDate date];
NSDate *date2 = [[NSDate alloc] initWithTimeInterval:10 sinceDate:date1];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];
BOOL result = [calendar isDate:date1 inSameDayAsDate:date2];
NSLog(@"date1:%@",date1);
NSLog(@"date2:%@",date2);
NSLog(@"result:%d",result);


2016-01-25 17:06:35.864 NSDate[5819:213004] date1:2016-01-25 09:06:35 +0000

2016-01-25 17:06:35.865 NSDate[5819:213004] date2:2016-01-25 09:06:45 +0000

2016-01-25 17:06:35.865 NSDate[5819:213004] result:1

4 、- isDateInToday:

(1)方法原型

- (BOOL)isDateInToday:(NSDate *)date
// 判断该日期是否是今天


(2)实例代码

NSDate *date1 = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];
BOOL result = [calendar isDateInToday:date1];
NSLog(@"date1:%@",date1);
NSLog(@"result:%d",result);


2016-01-25 17:10:43.807 NSDate[5873:215369] date1:2016-01-25 09:10:43 +0000

2016-01-25 17:10:43.808 NSDate[5873:215369] result:1

5 、 isDateInTomorrow:

(1)方法原型

- (BOOL)isDateInTomorrow:(NSDate *)date
// 判断该日期是否是明天


(2)实例代码

NSDate *date1 = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];
BOOL result = [calendar isDateInTomorrow:date1];
NSLog(@"date1:%@",date1);
NSLog(@"result:%d",result);


2016-01-25 17:14:07.737 NSDate[5918:217196] date1:2016-01-25 09:14:07 +0000

2016-01-25 17:14:07.738 NSDate[5918:217196] result:0

6 、- isDateInWeekend:

(1)方法原型

- (BOOL)isDateInWeekend:(NSDate *)date
// 判断该日期是否是周末


(2)实例代码

NSDate *date1 = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];
BOOL result = [calendar isDateInWeekend:date1];
NSLog(@"date1:%@",date1);
NSLog(@"result:%d",result);


2016-01-25 17:16:53.663 NSDate[5960:218732] date1:2016-01-25 09:16:53 +0000

2016-01-25 17:16:53.664 NSDate[5960:218732] result:0

7 、- isDateInYesterday:

(1)方法原型

- (BOOL)isDateInYesterday:(NSDate *)date
// 判断该日期是否是昨天


(2)实例代码

NSDate *date1 = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];
BOOL result = [calendar isDateInYesterday:date1];
NSLog(@"date1:%@",date1);
NSLog(@"result:%d",result);


2016-01-25 17:18:43.642 NSDate[5995:220031] date1:2016-01-25 09:18:43 +0000

2016-01-25 17:18:43.643 NSDate[5995:220031] result:0

四、提取日期组件

1 、- component:fromDate:

(1)方法原型

- (NSInteger)component:(NSCalendarUnit)unit
fromDate:(NSDate *)date
// 根据指定的unti返回对应的日期组件


(2)实例代码

NSDate *date1 = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];
NSInteger result = [calendar component:NSCalendarUnitMinute fromDate:date1];
NSLog(@"result:%d",result);


2016-01-25 17:52:49.313 NSDate[6459:232948] result:52

2 、- components:fromDate:toDate:options:

(1)方法原型

- (NSDateComponents *)components:(NSCalendarUnit)unitFlags
fromDate:(NSDate *)startingDate
toDate:(NSDate *)resultDate
options:(NSCalendarOptions)options
// 根据指定的unti返回对应组件的compontents


(2)实例代码

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];
unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth |  NSCalendarUnitDay;
NSDate *date = [NSDate date];
NSDateComponents *comps = [calendar components:unitFlags fromDate:date];
NSLog(@"comps:%@",comps);


Calendar Year: 32

Month: 12

Leap month: no

Day: 16

3 、- components:fromDate:toDate:options:

(1)方法原型

- (NSDateComponents *)components:(NSCalendarUnit)unitFlags
fromDate:(NSDate *)startingDate
toDate:(NSDate *)resultDate
options:(NSCalendarOptions)options


4、- components:fromDateComponents:toDateComponents:options:

(1)方法原型

- (NSDateComponents *)components:(NSCalendarUnit)unitFlags
fromDateComponents:(NSDateComponents *)startingDateComp
toDateComponents:(NSDateComponents *)resultDateComp
options:(NSCalendarOptions)options


5、- componentsInTimeZone:fromDate:

(1)方法原型

- (NSDateComponents *)componentsInTimeZone:(NSTimeZone *)timezone
fromDate:(NSDate *)date


6、- getEra:year:month:day:fromDate:

(1)方法原型

- (void)getEra:(out NSInteger *)eraValuePointer
year:(out NSInteger *)yearValuePointer
month:(out NSInteger *)monthValuePointer
day:(out NSInteger *)dayValuePointer
fromDate:(NSDate *)date


7、- getEra:yearForWeekOfYear:weekOfYear:weekday:fromDate:

(1)方法原型

- (void)getEra:(out NSInteger *)eraValuePointer
yearForWeekOfYear:(out NSInteger *)yearValuePointer
weekOfYear:(out NSInteger *)weekValuePointer
weekday:(out NSInteger *)weekdayValuePointer
fromDate:(NSDate *)date


8、- getHour:minute:second:nanosecond:fromDate:

(1)方法原型

- (void)getHour:(out NSInteger *)hourValuePointer
minute:(out NSInteger *)minuteValuePointer
second:(out NSInteger *)secondValuePointer
nanosecond:(out NSInteger *)nanosecondValuePointer
fromDate:(NSDate *)date
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios