[英]How to calculate time (minutes) between two dates in swift?
我们得到了什么:日期+时间(格式 yyyy-mm-dd hh:mm a)
我们在寻找什么:以分钟为单位的时差
什么操作:NewDate - OldDate
所以,我想知道我如何才能实现上述目标? 我想将日期和时间格式化为美国,无论用户使用哪种语言环境。 我怎样才能做到这一点?
然后我将'oldTime'保存到UserDefaults中,并用于以后的计算。 目标是让用户延迟 5 分钟,然后将执行计算以确定用户是否应该延迟。
只需创建一个接受两个日期并像这样比较它们的函数。
import UIKit
func minutesBetweenDates(_ oldDate: Date, _ newDate: Date) -> CGFloat {
//get both times sinces refrenced date and divide by 60 to get minutes
let newDateMinutes = newDate.timeIntervalSinceReferenceDate/60
let oldDateMinutes = oldDate.timeIntervalSinceReferenceDate/60
//then return the difference
return CGFloat(newDateMinutes - oldDateMinutes)
}
//Usage:
let myDateFormatter = DateFormatter()
myDateFormatter.dateFormat = "yyyy-MM-dd HH:mm"
//You'll need both dates to compare, you can get them by just storing a Date object when you first start the timer.
//Then when you need to check it, compare it to Date()
let oldDate: Date = myDateFormatter.date(from: String("2019-06-22 11:25"))
func validateRefresh() {
//do the comparison between the old date and the now date like this.
if minutesBetweenDates(oldDate, Date()) > 5 {
//Do whatever
}
}
当然,您可以将日期格式化程序上的.dateFormat
值更改为您喜欢的任何格式。 一个寻找正确格式的好网站是: https : //nsdateformatter.com/ 。
你说:
我想将日期和时间格式化为美国,无论用户使用哪种语言环境。 我怎样才能做到这一点?
指定en_US_POSIX
的Locale
:
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd hh:mm a"
formatter.locale = Locale(identifier: "en_US_POSIX")
语言环境不是唯一的问题。
还有一个时区问题。 例如,您开车离开芝加哥,从中部时区到东部时区; 你真的要考虑一小时过去了吗?
你真的要舍弃秒吗? 如果这样做,从晚上 8:00:00 到晚上 8:00:59 之间的 59 秒将被视为“零分钟”,但从晚上 8:00:59 到晚上 8:01:00 之间的一秒将被视为“一分钟”。分钟”。
坦率地说,如果我想保存区域设置和时区不变的日期字符串,我建议使用ISO8601DateFormatter
。
然后我将 'oldTime' 保存到
UserDefaults
,并将其用于以后的计算。
如果这就是您使用此DateFormatter
的原因,我建议直接保存Date
对象。
UserDefaults.standard.set(oldTime, forKey: "oldTime")
并检索它:
if let oldTime = UserDefaults.standard.object(forKey: "oldTime") as? Date {
...
}
在计算两个Date
对象之间的分钟数方面
let minutes = Calendar.current
.dateComponents([.minute], from: date1, to: date2)
.minute
如果你想要秒数,你也可以使用timeIntervalSince
:
let seconds = date2.timeIntervalSince(date1)
如果您想将经过的时间显示为一个漂亮的本地化字符串:
let intervalFormatter = DateComponentsFormatter()
intervalFormatter.allowedUnits = [.minute, .second]
intervalFormatter.unitsStyle = .full
let string = intervalFormatter.string(from: date1, to: date2)
我不相信您的问题是实现目标的最佳方式,但下面的代码将起作用。
let dateFormatterNow = DateFormatter()
dateFormatterNow.dateFormat = "yyyy-MM-dd hh:mm a"
dateFormatterNow.timeZone = TimeZone(abbreviation: "EST")
let oldDateString = "2019-06-23 12:44 p"
let oldDate = dateFormatterNow.date(from: oldDateString)
let newDateString = "2019-06-23 12:54 p"
let newDate = dateFormatterNow.date(from: newDateString)
if let oldDate = oldDate, let newDate = newDate {
let diffInMins = Calendar.current.dateComponents([.minute], from: oldDate, to: newDate).minute
print(diffInMins)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.