2016-11-29 30 views
1

我需要查找當前時間(以秒爲單位)和將來的開始時間(以秒爲單位從我的Web服務中獲取)之間的差異。 我已經編寫如下:由於時區不同,兩個日期時間之間的差異因秒數而異 - Swift 3

let currentTime = Int64(Date().timeIntervalSince1970) 
    var time = Int64(timeArr[indexPath.row]) 

    print("\(currentTime) vs \(time)") 
    time = time - currentTime 
    print("difference in time : \(time)") 

    let seconds = time % 60 
    let minutes = (time/60) % 60 
    let hours = (time/3600) 

我的控制檯顯示我的輸出:

1480400929 vs 1480552620 
difference in time : 151691 

的問題是,我現在的時間是Tue Nov 29 2016 11:58:49和開始時間是2016-11-30 17:37:00所以在時間的差異應該來到30小時左右,而在不同的時區需要花費大約42小時的時間。我該如何解決?我已經經歷了許多相同的問題,但沒有任何作用。任何幫助,將不勝感激。

+0

NSDate是絕對時間點,沒有任何時區信息。 1480400929是「2016年11月29日06:28:49 GMT」和1480552620是「2016年12月1日00:37:00 GMT」。這些時間之間的差別大約是42小時。 - 請解釋你期望的結果和*爲什麼。* –

+0

我想要我的當前時間是Tue Nov 29 2016 11:58:49和開始時間2016-11-30 17:37:00之間的區別,從服務器 – Mamta

+0

你是否將服務器時間當作字符串?你如何將該字符串轉換爲NSDate?什麼是服務器時區?你的時區是什麼? –

回答

0

如果你想在HoursMinutesseconds兩個日期之間的區別,你可以使用DateComponent這樣。

let component = Calendar.current.dateComponents([.hour, .minute, .second], from: Date(), to: startDate) 
let hours = component.hour ?? 0 
let minutes = component.minute ?? 0 
let seconds = component.second ?? 0 

編輯:從毫秒使用Date(timeIntervalSince1970:)這樣得到的日期。

let startDate = Date(timeIntervalSince1970: miliSeconds/1000) 

您也可以字符串轉換爲使用DateFormatter這樣的日期。

let stringDate = "2016-11-30 17:37:00" 
let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
dateFormatter.timeZone = TimeZone(abbreviation: "GMT") 
if let startDate = dateFormatter.date(from: stringDate) { 
    print(startDate) 
} 
+0

我得到我的startDate在毫秒的形式,所以將這種情況下的工作? – Mamta

+0

@Dia在這種情況下,您可以獲得像這樣的開始日期'let startDate = Date(timeIntervalSince1970:miliSeconds/1000)'也檢查編輯的答案。 –

+0

let startDate = Date(timeIntervalSince1970:TimeInterval(timeArr [indexPath.row])) let component = Calendar.current.dateComponents([。hour,.minute,.second],from:Date(),to:startDate) 讓小時= component.hour ?? 0 let minutes = component.minute ?? 0 let seconds = component.second ?? 0 我試過了。它仍然顯示42小時 – Mamta