2016-10-18 1 views
-4

지금은 밀리 초와 날짜의 차이가 필요합니다. 그것은 HH : mm : ss 형식이어야하며 내 코드가 정확한 차이로 나오지 않습니다.두 날짜의 차이 얻기

var differenceDate = NSDate(timeIntervalSince1970: Double(currentTimeInMiliseconds())) 
     let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = "HH:mm:ss" 
     self.callDetail.text = dateFormatter.string(from: differenceDate as Date) 

func currentTimeInMiliseconds() -> Int! { 
     let date = NSDate() 
     return Int(date.timeIntervalSince1970 * 1000) 
    } 
+0

날짜는 후드 초 수를 사용하는 것을 발견했다. 하지만 초 (밀리 초)는 날짜가 아닙니다! 여기서 DateFormatter를 사용하는 것은 완전히 부적절합니다. – matt

+0

비즈니스 규칙에 따라 밀리 초를 사용해야하므로 사용해야합니다. Double (currentTimeInMiliseconds는 실제로 밀리 초를 유지하는 변수로 이동하지만 더 설명하기 위해 변경했습니다.) – user1079052

+1

이것은 밀리 초와 관련이 없습니다. 'differenceDate'는 날짜가 아니며 "format"될 수 없습니다. A. 날짜 : – matt

답변

1

문제는 differenceDate이라는 이름에도 불구하고 날짜가 아닙니다. 그것은 단지 시간 간격 (초)입니다. 시간과 분, 초로 표현하고 싶다면 60으로 나누고 나머지는 취하십시오. 그러나 그 사람들은 시간과 분 및 초가 아님을 명심하십시오.

예 :

// make two dates, get the difference 
let greg = Calendar(identifier: .gregorian) 
let dc = DateComponents(calendar: greg, 
    year: 1954, month: 8, day: 10, hour: 3, minute: 0, second: 0) 
let d1 = greg.date(from: dc)! 
let d2 = Date() 
let diff = d2.timeIntervalSince(d1) 

// calculate hours, minutes, and seconds 
var min = diff/60 
let sec = diff.truncatingRemainder(dividingBy: 60) 
let hr = min/60 
min = min.truncatingRemainder(dividingBy: 60) 

// format the output as a string 
let nf = NumberFormatter() 
nf.roundingMode = .floor 
nf.minimumIntegerDigits = 2 

let hrs = nf.string(from: hr as NSNumber) 
let mins = nf.string(from: min as NSNumber) 

nf.maximumFractionDigits = 3 
let secs = nf.string(from: sec as NSNumber) 

print(hrs! + ":" + mins! + ":" + secs!) // 545169:33:18.841 

이 당신에게 원하는 형식과 밀리 초를 제공합니다. Rob이 제안한 것처럼 DateComponentsFormatter에서도 똑같은 작업을 수행 할 수 있지만 계산 결과는 똑같습니다.

3

HH:mm:ss 형식의 두 날짜 개체 사이의 시간을 원하는 경우 일반적으로 NSDateComponentsFormatter을 사용합니다. 스위프트 2에서

let formatter = DateComponentsFormatter() 
formatter.unitsStyle = .positional 
formatter.allowedUnits = [.hour, .minute, .second] 
formatter.zeroFormattingBehavior = .pad 

let string = formatter.string(from: referenceDate, to: date) 

: 스위프트 3 년

let formatter = NSDateComponentsFormatter() 
formatter.unitsStyle = .Positional 
formatter.allowedUnits = [.Hour, .Minute, .Second] 
formatter.zeroFormattingBehavior = .Pad 

let string = formatter.stringFromDate(referenceDate, toDate: date) 
0

내가 가장 쉬운 방법은 NSCalendar

let calendar: NSCalendar = NSCalendar.current as NSCalendar 
     let date1 = call!.startTime.dateFromMilliseconds() 
     let date2 = NSDate() 
     let components = calendar.components([.hour, .second, .minute], from: date1 , to: date2 as Date, options: []) 
     differenceDate = NSCalendar(identifier: NSCalendar.Identifier.gregorian)?.date(from: components) as NSDate!