只需创建一个接受两个日期并像这样比较它们的函数。
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
}
}
Run Code Online (Sandbox Code Playgroud)
当然,您可以.dateFormat
将日期格式化程序上的值更改为您喜欢的任何格式。一个寻找正确格式的好网站是:https : //nsdateformatter.com/。
你说:
\n\n\n\n\n我想将日期和时间格式化为美国,无论用户来自哪个区域设置。我怎样才能做到这一点?
\n
指定Locale
其中的一个en_US_POSIX
:
let formatter = DateFormatter()\nformatter.dateFormat = "yyyy-MM-dd hh:mm a"\nformatter.locale = Locale(identifier: "en_US_POSIX")\n
Run Code Online (Sandbox Code Playgroud)\n\n语言环境并不是唯一的问题。
\n\n还有\xe2\x80\x99s 还有一个时区问题。例如,您开车离开芝加哥,从中部时区前往东部时区;你真的想考虑一小时已经过去了吗?
你真的想丢弃秒吗?如果这样做,从 8:00:00pm 到 8:00:59pm 之间的 59 秒将被视为 \xe2\x80\x9czero 分钟\xe2\x80\x9d 但 8:00:59pm 到 8:00 之间的一秒:01:00pm 将被视为 \xe2\x80\x9cone 分钟\xe2\x80\x9d。
坦率地说,如果我想保存区域设置和时区不变的日期字符串,我\xe2\x80\x99d 建议使用ISO8601DateFormatter
.
\n\n\n然后我将把“oldTime”保存到 中
\nUserDefaults
,并用于以后的计算。
如果这就是你使用这个的原因DateFormatter
,我建议Date
直接保存该对象。
UserDefaults.standard.set(oldTime, forKey: "oldTime")\n
Run Code Online (Sandbox Code Playgroud)\n\n并检索它:
\n\nif let oldTime = UserDefaults.standard.object(forKey: "oldTime") as? Date {\n ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n\nDate
就计算两个物体之间的分钟数而言
let minutes = Calendar.current\n .dateComponents([.minute], from: date1, to: date2)\n .minute\n
Run Code Online (Sandbox Code Playgroud)\n\n如果你想要秒数,你也可以使用timeIntervalSince
:
let seconds = date2.timeIntervalSince(date1)\n
Run Code Online (Sandbox Code Playgroud)\n\n如果您想将经过的时间显示为一个很好的本地化字符串:
\n\nlet intervalFormatter = DateComponentsFormatter()\nintervalFormatter.allowedUnits = [.minute, .second]\nintervalFormatter.unitsStyle = .full\nlet string = intervalFormatter.string(from: date1, to: date2)\n
Run Code Online (Sandbox Code Playgroud)\n
我不相信你的问题是实现你的目标的最佳方法,但下面的代码会起作用。
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)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5521 次 |
最近记录: |