iOS中的NSDate、NSCalendar

NSDate

  • 获取当前的时间
    NSDate *date = [NSDate date];
    NSLog(@"%@",date);//Thu Sep 13 16:16:13 2017
  • 在当前时间上再加5秒
    NSDate *date1 = [date dateByAddingTimeInterval:5];
    NSLog(@"%@",date1);//Thu Sep 13 16:16:23 2017
  • 获取当前所处的时区
    //获取系统的
    NSTimeZone *systemZone = [NSTimeZone systemTimeZone];
    //获取本地的
    NSTimeZone *localZone = [NSTimeZone localTimeZone];
  • 获取当前时区和指定时间的时间差
NSInteger seconds = [systemZone secondsFromGMTForDate:date];
NSLog(@"%lu",seconds);//8小时
  • 时间格式化
    yyyy 年
    MM 月
    dd 日
    HH 24小时 hh 12 小时
    mm 分钟
    ss 秒
    Z 时区
    • NSDate—> NSString
        NSDate *now = [NSDate date];
      
        NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
        formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss z";
        NSString *dateStr = [formatter stringFromDate:now];
        NSLog(@"%@",dateStr);//2018-09-13 17:17:33 GMT+8
    
    • NSString—> NSDate
        NSString *dateString = @"2018-09-13 17:17:33 GMT+8";
        NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
        formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss Z";
        NSDate *lastdDate = [formatter dateFromString:dateString];
    

NSCalendar

概念

NSCalendar对象封装了关于计算时间系统的信息,提供有关日历和支持日历计算的信息

地区和日历(使用NSCalendarIdentifier指定日历的类型。公历是欧洲,西半球和其他地方通常使用的日历)

NSCalendarIdentifierGregorian  公历(大多数语言环境使用最广泛使用的民用日历)
NSCalendarIdentifierBuddhist   佛教日历     
NSCalendarIdentifierChinese     计算天文日期和中国传统节日       
NSCalendarIdentifierCoptic        科普特日历
NSCalendarIdentifierEthiopicAmeteMihret 埃塞俄比亚日历
NSCalendarIdentifierEthiopicAmeteAlem   埃塞俄比亚日历
NSCalendarIdentifierHebrew     希伯来日历  
NSCalendarIdentifierISO8601   ISO8601日历
NSCalendarIdentifierIndian        印度国家日历       
NSCalendarIdentifierIslamic       伊斯兰日历   
NSCalendarIdentifierIslamicCivil  伊斯兰民事日历      
NSCalendarIdentifierJapanese      日本日历      
NSCalendarIdentifierPersian          波斯日历   
NSCalendarIdentifierRepublicOfChina  中华民国(台湾)日历
NSCalendarIdentifierIslamicTabular     表格伊斯兰历法
NSCalendarIdentifierIslamicUmmAlQura   伊斯兰教Umm al-Qura日历      

###初始化日历

  • 创建由给定标识符指定的新日历
NSCalendar *calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierChinese];

NSCalendar *calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierChinese];    
  • 获取用户的日历
返回的日历由当前用户所选系统区域设置的设置形成,并覆盖用户在“系统偏好设置”中指定的任何自定义设置。您从此日历获得的设置不会随着“系统偏好设置”的更改而改变
NSCalendar *calendar = [NSCalendar currentCalendar];

从此日历获得的设置会随着用户设置的更改而改变
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];

###获取指定的日期组件

  • 获取基础内容
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *date = [NSDate date];

    //日历类型
    NSLog(@"calendarIdentifier:%@", calendar.calendarIdentifier);//calendarIdentifier:gregorian

    //系统归属地
    NSLog(@"locale:%@", calendar.locale.countryCode);//locale:US

    //当前时区
    NSLog(@"timeZone:%@", calendar.timeZone);//timeZone:Asia/Shanghai (GMT+8)

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

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

//获取日历属性的最大范围,比如月就是1到12
NSRange range = [calendar maximumRangeOfUnit:NSCalendarUnitMonth];
    NSLog(@"%lu-%lu",(unsigned long)range.location,(unsigned long)range.length);//1-12

//获取日历属性的最小范围,比如日就是1到28
NSRange range = [calendar minimumRangeOfUnit:NSCalendarUnitDay];
    NSLog(@"%lu-%lu",(unsigned long)range.location,(unsigned long)range.length);//1-28

//获取指定时间较小单位是较大单位中的第某个时候(date是这个月的第几天)
NSInteger day = [calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date];
    NSLog(@"%ld",(long) day);//19

//获取指定时间较小单位是较大单位中的范围(date是这个年有多少天)
NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitYear forDate:date];
NSLog(@"%ld--%ld",(long)range.location,range.length);//1--365

 // 获取时间所处的月份,起始时间点
 NSTimeInterval count = 0;
 NSDate *dateOut = nil;
 BOOL rangeOfUnit = [calendar rangeOfUnit:NSCalendarUnitMonth
                                   startDate:&dateOut interval:&count forDate:date];
if (rangeOfUnit) {
   NSLog(@"这个月开始日期:%@--这个月总秒数:%f",dateOut,count);
}//这个月开始日期:2018-08-31 16:00:00 +0000--这个月总秒数:2592000.000000


NSTimeInterval count = 0;
NSDate *dateOut = nil;
//指定日期是否在周末期间
BOOL rangeOfUnit = [calendar rangeOfWeekendStartDate:&dateOut interval:&count containingDate:date];

  • 判断给定日期是否与所有设置的日期匹配
    NSDateComponents *component = [[NSDateComponents alloc]init];
    component.year = 2018;
   
    BOOL flag = [calendar date:date matchesComponents:component];
    NSLog(@"%d",flag);//YES
    component.month = 10;
    BOOL flag1 = [calendar date:date matchesComponents:component];
    NSLog(@"%d",flag1);//NO
  • 返回给定日期的指定日期属性
 NSInteger year = [calendar component:NSCalendarUnitYear fromDate:date];
 NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:date];
 NSInteger day = [calendar component:NSCalendarUnitDay fromDate:date];
 NSInteger hour = [calendar component:NSCalendarUnitHour fromDate:date];
 NSInteger minute = [calendar component:NSCalendarUnitMinute fromDate:date];
 NSInteger second = [calendar component:NSCalendarUnitSecond fromDate:date];
 NSLog(@"year:%ld,month:%ld,day:%ld,hour:%ld,minute:%ld,second:%ld",year,month,day,hour,minute,second);
//year:2018,month:9,day:19,hour:16,minute:33,second:30 

 NSDateComponents  *components  =  [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth 
 NSCalendarUnitDay |  NSCalendarUnitHour | NSCalendarUnitMinute fromDate:[NSDate date]];
 NSLog(@"%ld年%ld月%ld日%ld时%ld分" ,(long)components.year,(long)components.month,(long)components.day
(long)components.hour,(long)components.minute);
 //2018年9月19日16时33分
  • 返回两个提供日期之间的差异
NSDate *nextDate = [NSDate dateWithTimeIntervalSinceNow:100];
NSDateComponents *components1 = [calendar components:NSCalendarUnitSecond fromDate:date toDate:nextDate
options:NSCalendarWrapComponents];
NSLog(@"%ld",(long)components1.second);//100
  • 获取指定时区的时间
NSDateComponents *components2 = [calendar componentsInTimeZone:[NSTimeZone systemTimeZone] fromDate:date];
NSLog(@"%ld",(long)components2.hour);//17
NSDateComponents *components3 = [calendar componentsInTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]
fromDate:date];
NSLog(@"%ld",(long)components3.hour);//9差8小时
  • 获取指定的的时代、年、月、日
NSInteger era, year, month, day, week;
[calendar getEra:&era year:&year month:&month day:&day fromDate:date];
NSLog(@"era:%ld,year:%ld,month:%ld,day:%ld",era,year,month,day);
//era:1,year:2018,month:9,day:19
  • 获取指定的时代、年、第几周、周几
NSInteger weekOfYear, weekday;
[calendar getEra:&era yearForWeekOfYear:&year weekOfYear:&weekOfYear weekday:&weekday fromDate:date];
NSLog(@"weekOfYear:%ld,weekday:%ld",weekOfYear,weekday);
//weekOfYear:38,weekday:4
  • 获取指定的时、分、秒
NSInteger hour, minute, second, nanosecond;
[calendar getHour:&hour minute:&minute second:&second nanosecond:&nanosecond fromDate:date];
 NSLog(@"hour:%ld,minute:%ld,second:%ld,nanosecond:%ld",hour,minute,second,nanosecond);
//hour:17,minute:49,second:0,nanosecond:189103960
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值