2016-11-29 31 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