2016-10-18 13 views
-4

現時点ではミリ秒と日付の差が必要です。それはHH:mm:ssの形式にする必要があり、私のコードは正しい差異を出していません。2つの日付の差を取得する

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

これはミリ秒とは関係ありません。日付形式ではありません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形式の2つの日付オブジェクト間の時間を希望する場合は、通常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! 
関連する問題