Objective - C : NSCalendar (日历)

系统语言环境

@property (class, readonly, copy) NSCalendar *currentCalendar;  
@property (class, readonly, strong) NSCalendar *autoupdatingCurrentCalendar
#pragma mark 获取系统语言环境
- (void)testSystemLocaleInformation {

    // 系统环境、NSCalendarIdentifierGregorian
    //  第一次用此方法实例化对象后,即使修改了系统日历设定,这个对象也不会改变。
    NSCalendar *calendar = [NSCalendar currentCalendar];
    // 修改系统日历设定,其实例化的对象也会随之改变。
    calendar = [NSCalendar autoupdatingCurrentCalendar];

}

初始化

+ (nullable NSCalendar *)calendarWithIdentifier:(NSCalendarIdentifier)calendarIdentifierConstant

- (instancetype)init

- (nullable id)initWithCalendarIdentifier:(NSCalendarIdentifier)ident
- (void)testCreatingAndInitializing {

    // (+) 自定义语言环境
    NSCalendar *calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierChinese];
    // (-)
    calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];

}

获取重要信息

@property (readonly, copy) NSCalendarIdentifier calendarIdentifier;
@property (nullable, copy) NSLocale *locale;
@property (copy) NSTimeZone *timeZone;
@property NSUInteger firstWeekday;
@property NSUInteger minimumDaysInFirstWeek;

- (NSRange)rangeOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date;

- (BOOL)rangeOfWeekendStartDate:(out NSDate * _Nullable * _Nullable)datep interval:(out nullable NSTimeInterval *)tip containingDate:(NSDate *)date;
#pragma mark 获取重要信息
- (void)testGettingInformation {

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *date = [NSDate date];

    NSLog(@"calendarIdentifier:%@", calendar.calendarIdentifier);

    // 设置每周的第一天从星期几开始,比如:1代表星期日开始,2代表星期一开始,以此类推。默认值是1
    NSLog(@"firstWeekday:%d", calendar.firstWeekday);

    // 设置每年及每月第一周必须包含的最少天数,比如:设定第一周最少包括3天,则value传入3
    NSLog(@"minimumDaysInFirstWeek:%d", calendar.minimumDaysInFirstWeek);

    // 设置本地化信息
    NSLog(@"locale:%@", calendar.locale);

    // 获取最大和最小范围
    NSRange range = [calendar maximumRangeOfUnit:NSCalendarUnitYear];
    range = [calendar minimumRangeOfUnit:NSCalendarUnitYear];

    // 获取一个小的单位在一个大的单位里面的序数,获取当日是这一周的第几天
    NSUInteger day = [calendar ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitWeekOfMonth forDate:date];
    NSLog(@"ordinalityOfUnit:%d", day);

    // 根据参数提供的时间点,得到一个小的单位在一个大的单位里面的取值范围
    range = [calendar rangeOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitWeekOfMonth forDate:date];

    // 根据参数提供的时间点,返回所在日历单位的开始时间。如果startDate和interval均可以计算,则返回YES;否则返回NO
    NSTimeInterval count = 0;
    NSDate *dateOut = nil;
    // 获取时间所处的月份,起始时间点
    BOOL rangeOfUnit = [calendar rangeOfUnit:NSCalendarUnitMonth startDate:&dateOut interval:&count forDate:date];
    if (rangeOfUnit) {
        //得到本地时间,避免时区问题
        NSInteger interval = [calendar.timeZone secondsFromGMTForDate:dateOut];
        NSDate *localeDate = [dateOut dateByAddingTimeInterval:interval];
        NSLog(@"%@", dateOut);
        NSLog(@"%@",localeDate);
        NSLog(@"%f",count);
    } else {
        NSLog(@"无法计算");
    }

    // 返回某个给定的日期是否在一个周末期间,如果startDate和interval均可以计算,则返回YES;否则返回NO
    rangeOfUnit = [calendar rangeOfWeekendStartDate:&dateOut interval:&count containingDate:date];
    if (rangeOfUnit) {
        //得到本地时间,避免时区问题
        NSInteger interval = [calendar.timeZone secon
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值