今天博主有一個時間戳的需求,遇到了一些困難點,在此和你們分享,但願可以共同進步.ide
iOS開發中,咱們在不少狀況下都會遇到使用當下時間做爲參數的狀況,這稱之爲時間戳.在iOSSDK中,與時間戳相關的API主要有三個,NSDate,NSCalendar和NSDateComponents.spa
NSDate 就是一個絕對的時間,能夠換算成相對1970s的時差.component
NSCalendar 顧名思義就是日曆,封裝了系統如何按照年月日的方式來組織時間,組織時間的方式和地區,時區有很大關係.orm
NSDateComponents 只是一個容器,容器中詳細包含了年月日時分等信息.開發
其中NSDate相信你們用的比較多,就不在這裏贅述了,各位看官自行百度,今天主要和你們分享一下NSCalendar和NSDateComponents,下面舉幾個例子,並貼出代碼,讓你們能更好的理解.string
1.拆分一個時間it
NSDate * date = [NSDate date];//當前時間io
NSCalendar * calendar = [NSCalendar currentCalendar];//當前用戶的calendarform
NSDateComponents * components = [calendar components:NSCalendarUnitMinute | NSCalendarUnitMonth | NSCalendarUnitHour | NSCalendarUnitDay fromDate:date];容器
NSLog(@"%ld月%ld日%ld時%ld分" ,(long)components.month,(long)components.day,(long)components.hour,(long)components.minute);
2.查看今天是在今年的第幾周
NSCalendar * calendar = [NSCalendar currentCalendar];
NSDate * currentDate = [NSDate date];
NSInteger week = [calendar ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitYear forDate:currentDate];
NSLog(@"今天是今年的第%ld周",week);
3.根據拆分時間返回NSDate
NSDateComponents * components = [[NSDateComponents alloc] init];
components.year = 2015;
components.month = 9;
components.day = 28;
components.hour = 14;
components.minute = 38;
components.second = 20;
NSCalendar * calendar = [NSCalendar currentCalendar];
NSDate * date = [calendar dateFromComponents:components];
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy年MM月dd日hh時mm分ss秒";
NSString * str = [formatter stringFromDate:date];
NSLog(@"%@",str);
4.相對時間(如今日後11天10小時)
NSDateComponents * components = [[NSDateComponents alloc] init];
components.day = 11;
components.hour = 10;
NSCalendar * calendar = [NSCalendar currentCalendar];
NSDate * currentDate = [NSDate date];
NSDate * nextData = [calendar dateByAddingComponents:components toDate:currentDate options:NSCalendarMatchStrictly];
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy年MM月dd日hh時mm分ss秒";
NSString * str = [formatter stringFromDate:nextData];
NSLog(@"%@",str);
5.這個月還有多少天
NSCalendar * calendar = [NSCalendar currentCalendar];
NSDate * currentDate = [NSDate date];
NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:currentDate];
6.補充
①.建立不一樣地區的NSCalendar
initWithCalendarIdentifier:
其中有效的identifer:
NSString * const NSGregorianCalendar;
NSString * const NSBuddhistCalendar;
NSString * const NSChineseCalendar;
NSString * const NSHebrewCalendar;
NSString * const NSIslamicCalendar;
NSString * const NSIslamicCivilCalendar;
NSString * const NSJapaneseCalendar;
NSString * const NSRepublicOfChinaCalendar;
NSString * const NSPersianCalendar;
NSString * const NSIndianCalendar;
NSString * const NSISO8601Calendar;
②.一週的開始日期
firstWeekday
③.地區和時區
locale 和 timeZone
④.全部的NSCalendarUnit
NSEraCalendarUnit = kCFCalendarUnitEra,
NSYearCalendarUnit = kCFCalendarUnitYear,
NSMonthCalendarUnit = kCFCalendarUnitMonth,
NSDayCalendarUnit = kCFCalendarUnitDay,
NSHourCalendarUnit = kCFCalendarUnitHour,
NSMinuteCalendarUnit = kCFCalendarUnitMinute,
NSSecondCalendarUnit = kCFCalendarUnitSecond,
NSWeekCalendarUnit = kCFCalendarUnitWeek,
NSWeekdayCalendarUnit = kCFCalendarUnitWeekday,
NSWeekdayOrdinalCalendarUnit = kCFCalendarUnitWeekdayOrdinal,
NSQuarterCalendarUnit = kCFCalendarUnitQuarter,
NSWeekOfMonthCalendarUnit = kCFCalendarUnitWeekOfMonth,
NSWeekOfYearCalendarUnit = kCFCalendarUnitWeekOfYear,
NSYearForWeekOfYearCalendarUnit = kCFCalendarUnitYearForWeekOfYear
NSCalendarCalendarUnit = (1 << 20),
NSTimeZoneCalendarUnit = (1 << 21).