#iOS時間那點事框架
##NSDate.net
能夠快速地獲取的時間點有:設計
now (當前時間點) 相對於1 January 2001, GMT的時間點 相對於1970的時間點 distantFuture (不可達到的將來的某個時間點) distantPast (不可達到的過去的某個時間點
根據http://www.gnustep.org/實現的NSDate的版本:code
<!-- lang: cpp --> @interface NSDate : NSObject <NSCoding, NSCopying> { NSTimeInterval _secondsSinceRef; } …… - (id) initWithTimeInterval:(NSTimeInterval) secsToBeAdded sinceDate:(NSDate *) anotherDate; 相對於已知的某個時間點 - (id) initWithTimeIntervalSinceNow:(NSTimeInterval) secsToBeAdded; 相對於當前時間 - (id) initWithTimeIntervalSince1970:(NSTimeInterval)seconds; 相對於1970年1月1日0時0分0秒 - (id) initWithTimeIntervalSinceReferenceDate:(NSTimeInterval) secs; 相對於2001年1月1日0時0分0秒 …… @end
能夠看出,NSDate類確實只是一個相對的時間點,NSTimeInterval的單位是秒(s),_secondsSinceRef則說明NSDate對象是相對於ReferenceDate(2001年1月1日0時0分0秒)的一個時間點。orm
同時,根據Cocoa框架的設計原則,每一個類都有一個「指定初始化方法」(指定初始化方法是參數最全,且其餘初始化方法都會調用的初始化方法)。http://www.gnustep.org/實現的版本以方法:對象
<!-- lang: cpp --> - (id) initWithTimeIntervalSinceReferenceDate:(NSTimeInterval) secs;
做爲指定初始化方法,也就是說全部的時間點都轉化爲了相對referenceDate的時間點(時間點都是相對的,由於時間自己就是相對的)。blog
NSDate中最經常使用的方法通常是:get
<!-- lang: cpp --> NSDate *now = [NSDate date]; // [[NSDate alloc] init] NSDate *dateFromNow = [NSDate dateWithTimeIntervalSinceNow:60]; NSDate *dateFromAnotherDate = [[NSDate alloc] initWithTimeInterval:60 sinceDate:dateFromNow]; NSTimeInterval timeInterval1 = [now timeIntervalSinceDate:dateFromNow]; NSTimeInterval timeInterval2 = [now timeIntervalSinceNow]; //------------------------------------------------------------- NSDate *distantPast = [NSDate distantPast]; // 能夠表示的最先的時間 NSDate *distantFuture = [NSDate distantFuture]; // 能夠表示的最遠的將來時間 NSString *stringDate = @"12/31/9999"; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; [dateFormatter setDateFormat:@"MM/dd/yyyy"]; NSDate *dateCheck = [dateFormatter dateFromString:stringDate]; NSLog(@"Date = %@", dateCheck); Output: Date = 1999-12-30 16:00:00 +0000 *iOS中用NSDate表示的時間只能在distantPast和distantFuture之間! //-------------------------------------------------------------
###本系列其餘文章不斷更新中:string