iOS日期時間

高家二少爺發表於2018-07-13

NSTimeInterval NSDate封裝了一個獨立於任何日曆系統或者時區的時間點。Date物件是不可變的,代表相對於絕對引用日期的一個不變的時間間隔。比如2010年1與1日就是一個標準時間。

NSDate類提供了比較兩個日期,計算兩個日期之間的間隔和以一個日期為基礎建立另一個日期的方法。NSDate物件和NSDateFormatter物件聯合使用可以建立本地化的日期和時間,以及聯合日曆物件去執行日曆算術。

NSLocale

一、 NSDate

  • 構造方法
//返回當前時間
- (instancetype)init
+ (instancetype)date;

//返回當前時間偏移secs秒後的時間,NSTimeInterval本質為double型別,可正可負
+ (instancetype)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;
- (instancetype)initWithTimeIntervalSinceNow:(NSTimeInterval)secs;
//例:    2017-03-01 08:21:26 +0000
//偏移 20為2017-03-01 08:21:46 +0000  
//偏移-20為2017-03-01 08:21:06 +0000

//返回 2001-01-01 0:0:0  加上 ti 秒的時間
+ (instancetype)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)ti;

//返回 1970-01-01 00:00:00 加上secs秒
+ (instancetype)dateWithTimeIntervalSince1970:(NSTimeInterval)secs;
- (instancetype)initWithTimeIntervalSince1970:(NSTimeInterval)secs;


//返回基準時間加上 secsToBeAdded 秒
+ (instancetype)dateWithTimeInterval:(NSTimeInterval)secsToBeAdded sinceDate:(NSDate *)

複製程式碼
  • 其他獲取方法
//返回及早時間點 0001-12-30 00:00:00 +0000
+(instancetype)distancePast
//返回極晚時間點 4001-01-01 00:00:00 +0000
+(instancetype)distanceFuture

//底下兩個方法文件說:Returns the later(earlier) of the receiver and another given date.
//返回的時間都是比當前時間早8個小時,不明白哪個大神解釋一下
- (NSDate *)earlierDate:(NSDate *)anotherDate;
- (NSDate *)laterDate:(NSDate *)anotherDate;

複製程式碼
//返回當前物件時間與客戶端時間的相隔秒數,也可以這樣理解:從客戶端當前時間開始,經過多少秒到達物件指定時間.程式碼執行延時
- (NSTimeInterval)timeIntervalSinceNow:
- (NSTimeInterval)timeIntervalSince1970
- (NSTimeInterval)timeIntervalSinceReferenceDate
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate;
複製程式碼
  • 比較
- (NSComparisonResult)compare:(NSDate *)other;
- (BOOL)isEqualToDate:(NSDate *)otherDate;

其中NSComparisonResult列舉有三個值
NSOrderedAscending ,
NSOrderedSame,
NSOrderedDescending};

複製程式碼

二、NSDateComponents

  • 屬性
@property (nullable, copy) NSCalendar *calendar NS_AVAILABLE(10_7, 4_0);
@property (nullable, copy) NSTimeZone *timeZone NS_AVAILABLE(10_7, 4_0);
//年代
@property NSInteger era;
@property NSInteger year;
@property NSInteger month;
@property NSInteger day;
@property NSInteger hour;
@property NSInteger minute;
@property NSInteger second;
//納秒
@property NSInteger nanosecond NS_AVAILABLE(10_7, 5_0);
@property NSInteger weekday;
//按工作日順序
@property NSInteger weekdayOrdinal;
//季度
@property NSInteger quarter NS_AVAILABLE(10_6, 4_0);
//一月中的第幾周
@property NSInteger weekOfMonth NS_AVAILABLE(10_7, 5_0);
//一年中的第幾周
@property NSInteger weekOfYear NS_AVAILABLE(10_7, 5_0);
@property NSInteger yearForWeekOfYear NS_AVAILABLE(10_7, 5_0);
//閏月
@property (getter=isLeapMonth) BOOL leapMonth NS_AVAILABLE(10_8, 6_0);

@property (nullable, readonly, copy) NSDate *date NS_AVAILABLE(10_7, 4_0);
@property (getter=isValidDate, readonly) BOOL validDate NS_AVAILABLE(10_9, 8_0);
複製程式碼

三、NSCalendar

五種風格的搭配結果

各國語言縮寫對照表

相關文章