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
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- 分享一个iOS下实现基本绘画板功能的简单方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器