web-dev-qa-db-ja.com

Swift 3の2つの時間の時差を取得する

DatePickerから2回取得する2つの変数があり、それらの差を変数に保存する必要があります。

    let timeFormatter = DateFormatter()
    timeFormatter.dateFormat = "HHmm"

    time2 = timeFormatter.date(from: timeFormatter.string(from: datePicker.date))!

私はそれらの両方からtimeIntervalSince1970を取得しようとしましたが、それらはそれらを減算し、時間と分に戻すミリ秒の差を取得しましたが、実際の時間に対応しない非常に大きな数を取得しました。

let dateTest = time2.timeIntervalSince1970 - time1.timeIntervalSince1970

次に、time2.timeIntervalSince(date:time1)を使用してみましたが、結果のミリ秒は実際の時間よりもはるかに長くなります。

2時間の正確な時差を取得して、8時間23分のフォーマット "0823"で時間と分を取得する方法を教えてください。

7
ToroLoco

日付の計算を行う推奨される方法は、CalendarおよびDateComponentsです。

_let difference = Calendar.current.dateComponents([.hour, .minute], from: time1, to: time2)
let formattedString = String(format: "%02ld%02ld", difference.hour!, difference.minute!)
print(formattedString)
_

形式_%02ld_は、パディングゼロを追加します。

時間と分の間のコロンを使用した標準形式が必要な場合は、DateComponentsFormatter()がより便利な方法です

_let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.hour, .minute]
print(formatter.string(from: time1, to: time2)!)
_
14
vadian

TimeIntervalはミリ秒ではなく秒を測定します:

let date1 = Date()
let date2 = Date(timeIntervalSinceNow: 12600) // 3:30

let diff = Int(date2.timeIntervalSince1970 - date1.timeIntervalSince1970)

let hours = diff / 3600
let minutes = (diff - hours * 3600) / 60
10
Gereon

2つの時間間隔の間でsecondsで期間を取得するには、これを使用できます-

let time1 = Date(timeIntervalSince1970: startTime)
let time2 = Date(timeIntervalSince1970: endTime)
let difference = Calendar.current.dateComponents([.second], from: time1, to: time2)
let duration = difference.second
2
Namit Gupta

これでSwift 5このように、

func getDateDiff(start: Date, end: Date) -> Seconds  {
    let calendar = Calendar.current
    let dateComponents = calendar.dateComponents([Calendar.Component.second], from: start, to: end)

    let seconds = dateComponents.second
    return Seconds(seconds!)
}
2
cary