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