iOS時間那點事--NSDate

#iOS時間那點事框架

##NSDate.net

  1. NSDate對象用來表示一個具體的時間點。
  2. NSDate是一個類簇,咱們所使用的NSDate對象,都是NSDate的私有子類的實體。
  3. NSDate存儲的是GMT時間,使用的時候會根據 當前應用 指定的 時區 進行時間上的增減,以供計算或顯示。

能夠快速地獲取的時間點有:設計

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

  1. iOS時間那點事--NSDate
  2. iOS時間那點事--NSDateFormatter
  3. iOS時間那點事--NSTimeZone
  4. iOS時間那點事--NSLocale
相關文章
相關標籤/搜索