iOS應用中NTP的使用

2021-07-24 05:37:22 字數 1246 閱讀 8888

network time protocol是用來使

時間同步化的一種協議,可以通過網路取得當前時間,而不依賴與於本地系統時間。

在ios應用的開發過程中,經常會需要取得系統時間,對絕大多數的應用來說,[nsdate date]就已經足夠了,但是單純 

利用系統時間的弊端在於,系統時間是可以被使用者隨意修改的,當應用對時間的要求比較高的場合,系統時間就不那麼可靠了。 

比如按期收費訂閱等處理要求,雖然可以通過每次都向蘋果發出支付請求來保證使用者不會過期使用,但使用者體驗就會相當惡劣。 

當然也可以通過部署在網路上的業務伺服器來提供時間的驗證,但如果沒有自己去部署業務伺服器的條件,又該怎樣保證時間的正確性呢? 

這種時候,ntp就有了用武之地。  

使用方法很簡單,github上也有簡單介紹:

第一步:新增相應的支援檔案。

我們要把這個demo裡,ios-ntp-lib和network-udp資料夾加到自己的專案裡來,因為ios-ntp需要用到ayncudpsocket

第二步:引入標頭檔案和開啟ntp服務。

我們只要把ios-ntp.h這個檔案匯入要使用的檔案中就行了。

第三步:開啟時間同步服務。

[networkclocksharednetworkclock]; 

現在所有的配置工作都已經做完了。如果我們需要得到當前標準時間,可以使用+(nsdate *) networkdate;這個方法。

判斷當前時間和系統時間的差,可以這樣寫,

nsdate*date = [nsdate date];

nsinteger outtime = [[nsdate networkdate]timeintervalsincedate:date];

// [nsdate networkdate],輸出是gmt時間(gmt(greenwich mean time)代**林尼治標準時間),如果想獲取當前時間需要通過時間戳進行轉換

nsdate * date = [nsdate networkdate];// 獲得時間物件

nstimezone *zone = [nstimezone systemtimezone]; // 獲得系統的時區

nstimeinterval time = [zone secondsfromgmtfordate:date];// 以秒為單位返回當前時間與系統格林尼治時間的差

nsdate *nowdate = [date datebyaddingtimeinterval:time];// 然後把差的時間加上,就是當前系統準確的時間

iOS應用中NTP的使用

原文 network time protocol是用來使 時間同步化的一種協議,可以通過網路取得當前時間,而不依賴與於本地系統時間。在ios應用的開發過程中,經常會需要取得系統時間,對絕大多數的應用來說,nsdate date 就已經足夠了,但是單純 利用系統時間的弊端在於,系統時間是可以被使用者隨...

iOS應用中NTP的使用

原文 network time protocol是用來使 時間同步化的一種協議,可以通過網路取得當前時間,而不依賴與於本地系統時間。在ios應用的開發過程中,經常會需要取得系統時間,對絕大多數的應用來說,nsdate date 就已經足夠了,但是單純 利用系統時間的弊端在於,系統時間是可以被使用者隨...

iOS中鎖的應用

synchronized 這玩意是對括號內的內容進行加鎖,保證執行緒安全,一般用在偽單例的使用中 nslock 顧名思義,就是乙個簡單的鎖,通過alloc建立後使用,具備lock,unlock以及lockbeforedate方法.其中最後乙個方法表示在指定時間之前。nsconditionlock 條...