2012-11-11 87 views
7

我是一名Objective-C初學者,我被分配爲我們的客戶創建iPhone應用程序。我有一些Java的背景,但在這個目標幾乎沒有經驗,這是我第一次開發一個完整的應用程序...如何將NSDate轉換爲整數以將PHP date()作爲unix時間戳?

無論如何,我目前堆棧在幾個問題。其中一個問題是我需要從我的iOS應用程序發送PHP的date函數的整數值。我一直在尋找解決方案,但他們都處理相反的方式(詮釋到NSDate),而不是NSDate整數值。

我試圖解決方案,如回答here 但很明顯它返回雙,而不是一個整數...
或者this 但這不能得到System time

我知道我能得到當前系統的NSDate的有:

NSDate *theDay = [NSDate dateWithTimeIntervalSinceNow:[[NSTimeZone systemTimeZone] secondsFromGMT]]; 

但我無法弄清楚如何將其轉換爲一個整數(或長)值。

我只需要得到相同的價值,因爲我們可以在JavaSystem.currentTimeMillis()得到相同的價值。

此外,這是我第一次在這裏提問stackoverflow。所以,請讓我知道如果有什麼我應該做的/不要在這裏發佈問題等。

謝謝。

回答

7

爲了得到當前的日期,你應該這樣做:

NSDate *theDate = [NSDate date]; 

爲了得到它在幾秒鐘內自1970年1月1日,作爲雙,你可以使用:

NSTimeInterval seconds = [[NSDate date] timeIntervalSince1970]; 

要獲得它以毫秒爲單位,只需將以前的值乘以1000並讓編譯器將其轉換爲整數而不需要任何附加代碼:

正如@HotLicks指出,雖然System.currentTimeMillis()是在格林尼治標準時間,如果你需要的本地時間,你可以使用:(我認爲,大多數Web服務將要GMT雖然)

long long milliseconds = ([[NSDate date] timeIntervalSince1970] 
         + [[NSTimeZone defaultTimeZone] secondsFromGMT]) * 1000; 

+1

它應該請注意,NSDate默認情況下是/設計,相對於UTC/GMT,並且不包括時區信息。如果需要「本地」時間,則必須添加時區偏移(適當縮放到秒或毫秒)。 –

+2

@HotLicks:還應該注意''System.currentTimeMillis()'(在java中)返回UTC的時間。 ;-) – lnafziger

+0

@lnafziger感謝您快速,清楚的解釋和解決方案!我其實之前嘗試過,但它沒有從我們的PHP服務器返回正確的結果。不過,我現在在Java中運行一些快速測試,我可以確認您的代碼返回與Java的currentTimeMillis相同的結果。正如Hot Licks所指出的,可能我需要自己添加時區偏移量(因此,對於我來說,實際上沒有「簡單的方法」來通過簡單的單行方法來獲取包含「自動」時區的值)。謝謝你們花時間閱讀我的問題,並給予幫助! –

相關問題