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"で時間と分を取得する方法を教えてください。
日付の計算を行う推奨される方法は、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)!)
_
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
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
これで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!)
}