【发布时间】:2019-08-27 09:57:43
【问题描述】:
我正在尝试获取跨越两天(过夜)的两次之间的正确时间间隔。这是我的代码成功打印出两次之间的差异 - 但是对于我的用例,我需要能够在一夜之间跨越,我该怎么做?
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
//This time represents (23:00, Aug 07) for example
let date1 = dateFormatter.date(from: "23:00")!
//This time represents (06:00, Aug 08) for example
let date2 = dateFormatter.date(from: "06:00")!
let elapsedTime = date2.timeIntervalSince(date1)
print(abs(elapsedTime)/60/60)
//prints 17.0
我想要的结果是打印出 7,因为这是 8 月 7 日 23:00 和 8 月 8 日 06:00 之间的小时数 - 我当前的代码正确地显示了这两次之间的间隔(如如果他们来自同一天),但我正在努力解决这些时间重叠两天的情况。任何帮助将不胜感激。
更新:
为了提供更完整的图片,我有一个对象,它的开始和结束日期由字符串表示:
Activity(startTime: "23:00", endTime: "06:00")
我使用一些函数将这些字符串转换为日期:
func startDate(startTime: String) -> Date {
let currentDate = Date().string(format: "dd-MM-yyyy")
let myStartingDate = "\(currentDate) \(startTime)"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy HH:mm"
let startDate = dateFormatter.date(from: myStartingDate)
return startDate!
}
func endDate(endTime: String) -> Date {
let currentDate = Date().string(format: "dd-MM-yyyy")
let myEndingDate = "\(currentDate) \(endTime)"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy HH:mm"
let endDate = dateFormatter.date(from: myEndingDate)
return endDate!
}
所以我更完整的作品看起来更像这样:
func calculateTimeInterval(activity: Activity) {
let startHourDate = self.startDate(startTime: activity.startTime)
let endHourDate = self.endDate(endTime: activity.endTime)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
//This time represents (23:00, Aug 07) for example
let date1 = startHourDate!
//This time represents (06:00, Aug 08) for example
let date2 = endHourDate!
let elapsedTime = date2.timeIntervalSince(date1)
print(abs(elapsedTime)/60/60)
}
//prints 17.0
【问题讨论】:
-
在您的应用中,您如何知道他们在不同的日子?您的示例仅显示 2 次。
-
你也应该有
date。 -
感谢您的 cmets,我添加了一些可能有帮助的更多信息,我认为问题,正如 vacawama 所逃避的那样,是我没有在特定日期烘烤 - 我是刚开始使用 Dates,所以如果有人能把我送到正确的方向,那就太好了!
-
从“23:00”到第二天“06:00”的时间间隔“通常”是7小时,但如果时钟调整为夏令时,也可以是6小时或8小时时间。因此,如果没有额外的信息,这个问题就不清楚了。开始日期总是在当前天吗?
-
是的,开始日期总是在当天。