我有2个约会。我不在乎日期部分,只是时间。
如何比较2个日期并获取2个日期之间的时间间隔?
我应该将日期设置为2000年1月1日,而不用花时间比较吗?
答案 0 :(得分:0)
使用DateComponents
并获取两个日期中的小时,分钟和秒。在这一点上,您必须假设一天24小时,每天86400秒。由于您进行的是与日期无关的计算,因此无需担心夏令时或leap秒。
将小时,分钟和秒转换为两个日期一天的总秒数。然后简单地将两个总数相减就可以了。
这是一个有用的日期扩展名:
extension Date {
func secondsSinceMidnight() -> TimeInterval {
let comps = Calendar.current.dateComponents([.hour,.minute,.second], from: self)
return TimeInterval(comps.hour! * 3600 + comps.minute! * 60 + comps.second!)
}
func timeDifference(to date: Date) -> TimeInterval {
return date.secondsSinceMidnight() - self.secondsSinceMidnight()
}
}
使用您的两个日期致电timeDifference(to:)
,忽略日期的日期部分,您将获得以秒为单位的差异。
结果为负表示to
日期更接近午夜。
答案 1 :(得分:0)
如果您有两个日期,则可以使用timeIntervalSince(Date)方法。
例如:
func calculateElapsedTime(from someTime: Date) -> TimeInterval {
let currentTime = Date()
var elapsedTime = currentTime.timeIntervalSince(someTime)
return elapsedTime
}
如果只想考虑两个日期之间的时差,则必须首先将日期标准化。这可以通过以下繁琐的方式完成:
let currentDate = Date()
let anotherDate = Date(timeInterval: 60, since: currentDate)
let formatter = DateFormatter()
formatter.timeStyle = .short
let currentTime = formatter.string(from: currentDate)
let anotherTime = formatter.string(from: anotherDate)
let currentIntervalTime = formatter.date(from: currentTime)
let anotherIntervalTime = formatter.date(from: anotherTime)
let elapsedTime = anotherIntervalTime?.timeIntervalSince(currentIntervalTime!)
希望这可以解决您的问题。
答案 2 :(得分:0)
这是完全基于DateComponents
extension Date {
func timeComponents() -> DateComponents {
return Calendar.current.dateComponents([.hour,.minute,.second], from: self)
}
func timeDifference(to date: Date) -> Int {
return Calendar.current.dateComponents([.second], from: date.timeComponents(), to: self.timeComponents()).second!
}
}