iOS時間那點事--NSDate
NSDate
NSTimeZone 網址:http://my.oschina.net/yongbin45/blog/151376
NSDateFormatter 網址: http://my.oschina.net/yongbin45/blog/150667
NSDate物件用來表示一個具體的時間點。
NSDate是一個類簇,我們所使用的NSDate物件,都是NSDate的私有子類的實體。
NSDate儲存的是GMT時間,使用的時候會根據 當前應用 指定的 時區 進行時間上的增減,以供計算或顯示。
可以快速地獲取的時間點有:
now (當前時間點)
相對於1 January 2001, GMT的時間點
相對於1970的時間點
distantFuture (不可達到的未來的某個時間點)
distantPast (不可達到的過去的某個時間點
根據http://www.gnustep.org/實現的NSDate的版本:
@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秒)的一個時間點。
同時,根據Cocoa框架的設計原則,每個類都有一個“指定初始化方法”(指定初始化方法是引數最全,且其他初始化方法都會呼叫的初始化方法)。http://www.gnustep.org/實現的版本以方法:
- (id) initWithTimeIntervalSinceReferenceDate:(NSTimeInterval) secs;
作為指定初始化方法,也就是說所有的時間點都轉化為了相對referenceDate的時間點(時間點都是相對的,因為時間本身就是相對的)。
NSDate中最常用的方法一般是:
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之間!
//-------------------------------------------------------------
相關文章
- 直播平臺原始碼,iOS中使用 Date/NSDate 來獲取時間原始碼iOS
- PHP定時器那點事PHP定時器
- NSDate 時間比較中的時區問題.
- iOS版應用支援IPV6,就那點事兒iOS
- 佈局那點事
- 前端加密那點事前端加密
- 作用域那點事
- 遞迴那點事遞迴
- Android Activity那點事Android
- Java synchronized那點事Javasynchronized
- iOS之NSDate\CFAbsoluteTimeGetCurrent\CACurrentMediaTime的區別iOS
- 關於實時推送系統的那點事
- 【GoLang 那點事】gRPC 攔截器那點事,希望幫到你(六)GolangRPC
- JS定時器,你所要了解的那點事JS定時器
- vue元件的那點事Vue元件
- 跨域的那點事跨域
- 面試那點事兒面試
- Webpack4那點事Web
- PostgreSQL的那點事兒SQL
- QQ申訴那點事
- MySQL的timeout那點事MySql
- Java 物件頭那點事Java物件
- 聊聊 Kafka Consumer 那點事Kafka
- Flutter FocusNode 焦點那點事-(一)Flutter
- Session、Cookie、Token 【淺談三者之間的那點事】SessionCookie
- 檔案下載那點事
- js關於物件那點事JS物件
- SpringCloud微服務的那點事SpringGCCloud微服務
- MySQL 慢查詢那點事MySql
- Toast與Snackbar的那點事AST
- 求職那點破事兒求職
- php 學習筆記之關於時區的那點事PHP筆記
- 關於http斷點續傳那點事HTTP斷點
- 資料埋點測試的那點事
- iOS日期時間iOS
- iOS全埋點解決方案-時間相關iOS
- Spring Cloud 微服務的那點事SpringCloud微服務
- [資料庫]--Transaction那點事兒資料庫
- 關於 Flex 的那點事兒Flex