Skip to content

Latest commit

 

History

History
251 lines (205 loc) · 7.89 KB

NSCalendar.md

File metadata and controls

251 lines (205 loc) · 7.89 KB

#NSCalendar

##初始化

###获取本地信息

//+ currentCalendar
//取得当前用户的逻辑日历
//currentCalendar取得的值会一直保持在cache中,第一次取得以后如果用户修改该系统日历设定,这个值也不会改变。
NSCalendar *calendar = [NSCalendar currentCalendar];
NSLog(@"calendar = %@",calendar);

//+ (id)autoupdatingCurrentCalendar
//取得当前用户的逻辑日历
//用autoupdatingCurrentCalendar,那么每次取得的值都会是当前系统设置的日历的值。
NSCalendar *autoupdatingCurrent = [NSCalendar autoupdatingCurrentCalendar];
NSLog(@"autoupdatingCurrent = %@",autoupdatingCurrent);

###自定义日历

/*
iOS8都被替换成其他的字符串,点进头文件就可以看见
FOUNDATION_EXPORT NSString * const NSGregorianCalendar;        //公历(常用)
FOUNDATION_EXPORT NSString * const NSBuddhistCalendar;         //佛教日历
FOUNDATION_EXPORT NSString * const NSChineseCalendar;          //中国农历(常用)
FOUNDATION_EXPORT NSString * const NSHebrewCalendar;           //希伯来日历
FOUNDATION_EXPORT NSString * const NSIslamicCalendar;          //伊斯兰历
FOUNDATION_EXPORT NSString * const NSIslamicCivilCalendar;     //伊斯兰教日历
FOUNDATION_EXPORT NSString * const NSJapaneseCalendar;         //日本日历(和历,常用)
FOUNDATION_EXPORT NSString * const NSRepublicOfChinaCalendar;  //中华民国日历(台湾)
FOUNDATION_EXPORT NSString * const NSPersianCalendar;          //波斯历
FOUNDATION_EXPORT NSString * const NSIndianCalendar;           //印度日历
FOUNDATION_EXPORT NSString * const NSISO8601Calendar;          //ISO8601(但是现在还不可用)
*/

初始化的时候ident就传入以上数据的一种

- (id)initWithCalendarIdentifier:(NSString *)ident NS_DESIGNATED_INITIALIZER;

举例:

 NSCalendar *initCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
        NSLog(@"%@", initCalendar);
##设置工作日
//- setFirstWeekday:
//设置第一个工作日
//设定每周的第一天从星期几开始,比如:
//.  如需设定从星期日开始,则value传入1
//.  如需设定从星期一开始,则value传入2
//.  以此类推
[initCalendar setFirstWeekday:1];
##设置区域
[initCalendar setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
//设定作为(每年及每月)第一周必须包含的最少天数,比如:. 如需设定第一周最少包括7天,则value传入7
//– setMinimumDaysInFirstWeek:
[initCalendar setMinimumDaysInFirstWeek:7];
##设置时区
[initCalendar setTimeZone:[NSTimeZone defaultTimeZone]];
##获取日历信息

###日历标示符

//返回日历标示符
NSString *calendarIdentifier = [initCalendar calendarIdentifier];
NSLog(@"calendarIdentifier = %@",calendarIdentifier);

###获取每周的第一天

//– firstWeekday
//返回日历指定的每周的第一天从星期几开始。缺省为星期天,即firstWeekday = 1

NSUInteger firstWeekday = [initCalendar firstWeekday];
NSLog(@"firstWeekday = %lu",firstWeekday);

###返回日历指定的地区信息

NSLocale *locale = [initCalendar locale];
NSLog(@"locale = %@",locale.localeIdentifier);

###获取范围

//– maximumRangeOfUnit:    //返回单元的最大范围
//- minimumRangeOfUnit:    //返回单元的最小范围 //比如Day Calendar Unit就是一个月最多31天这个意思
NSRange range = [initCalendar maximumRangeOfUnit:NSCalendarUnitDay];
NSLog(@"range = %lu",range.length);
//- minimumDaysInFirstWeek
//返回日历指定的第一周必须包含的最少天数。
NSUInteger minimumDays = [initCalendar minimumDaysInFirstWeek];
NSLog(@"minimumDays = %lu",minimumDays);
##NSDateComponents

获取时间组件

NSDateComponents *dc = [[NSDateComponents alloc] init];
[dc setYear: 2013];
[dc setMonth: 4];
[dc setDay: 6];
////
NSDate *date = [calendar dateFromComponents:dc];
##获取时间组件
//返回时间组件

// 利用逻辑非连接你想要的组件
unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth |  NSCalendarUnitDay;
// 获取相应的组件
NSDateComponents *comps = [initCalendar components:unitFlags fromDate:[NSDate date]];
NSLog(@"NSDateComponents - %lu",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", months, days);
##创建日期
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:1965];
[comps setMonth:1];
[comps setDay:1];
[comps setHour:2];
[comps setMinute:10];
[comps setSecond:0];
NSDate *date = [calendar dateFromComponents:comps];
NSLog(@"date = %@",date);
##通过身份证获取年龄姓名

创建一个Person类,如下:

#define Code_Number 18      // 身份证号码个数
#define Sex_Start 16        // 性别起始位置
#define Sex_Length 1        // 性别长度
#define Birthday_Start 6    // 出生日期起始位置
#define Birthday_Length 8   // 出生日期长度

@interface Person : NSObject
{
    NSString * _name;           // 姓名
    NSString * _code;           // 身份证号
    NSString * _sex;            // 性别
    NSString * _birthday;       // 出生日期
    NSInteger _age;             // 年龄
}

- (instancetype)initWithCode:(NSString *)code;

在.m文件中实现相应的根据身份证获取年龄性别等

- (instancetype)initWithCode:(NSString *)code
{
    if (self = [super init]) {
    // 判断身份证合法
        if (code.length == Code_Number) {
            _code = code;

            // 获取sex的字符串,并且判断是单数还是双数
            NSString * codeString = [_code substringWithRange:NSMakeRange(Sex_Start, Sex_Length)];
            if ([codeString integerValue] % 2) {
                _sex = @"";
            } else {
                _sex = @"";
            }
            // 获取出生日期的字符串
            _birthday = [_code substringWithRange:NSMakeRange(Birthday_Start, Birthday_Length)];
            // 设置相对应的格式
            NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
            // 必须和字符串的格式相匹配
            [formatter setDateFormat:@"yyyyMMdd"];
            // 获取出生日期
            NSDate * birthdayDate = [formatter dateFromString:_birthday];
            NSLog(@"%@", birthdayDate);
            // 获取现在日期
            NSDate * nowDate = [NSDate date];
            // 初始化一个日历(用中国的一个字符串作为标示)
            NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierRepublicOfChina];
            // 设置所需要的枚举,我们这里需要的年
            NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
            // 算出出生日期到现在相差的年数 来获取年龄
            NSDateComponents * dateComponents = [calendar components:unit fromDate:birthdayDate toDate:nowDate options:NSCalendarWrapComponents];
            _age = [dateComponents year];
        }
    }
    return self;
}