Swift-检查当前时间是不是在两个时间字符串之间
Posted
技术标签:
【中文标题】Swift-检查当前时间是不是在两个时间字符串之间【英文标题】:Swfit- Check whether current time is between two time stringSwift-检查当前时间是否在两个时间字符串之间 【发布时间】:2020-10-01 17:56:46 【问题描述】:如何检查当前时间是否在以下格式的两个时间字符串之间。
HH:MM AM/PM
说如果
startTime = "10:30 AM"
endTime = "06:30 PM"
如何检查currentTime()
的值是否在开始时间和结束时间之间?
【问题讨论】:
您是否厌倦了获取相当于日期+时间的 Unix 时间戳,然后比较所有三个值。时间戳不应低于开始时间和高于结束时间 我从 API 获取开始和结束日期,因此无法使用 Unix 时间戳 那你就可以用普通的swift特性来比较时间戳了....我举个例子 【参考方案1】:您可以设置今天的日期格式化程序defaultDate
,解析日期字符串,创建一个带有开始和结束日期的DateInterval
,并检查它是否包含现在Date()
:
extension Formatter
static let today: DateFormatter =
let dateFormatter = DateFormatter()
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.defaultDate = Calendar.current.startOfDay(for: Date())
dateFormatter.dateFormat = "hh:mm a"
return dateFormatter
()
func checkIfCurrentTimeIsBetween(startTime: String, endTime: String) -> Bool
guard let start = Formatter.today.date(from: startTime),
let end = Formatter.today.date(from: endTime) else
return false
return DateInterval(start: start, end: end).contains(Date())
let startTime = "10:30 AM"
let endTime = "06:30 PM"
checkIfCurrentTimeIsBetween(startTime: startTime, endTime: endTime) // true
【讨论】:
我喜欢today
格式化程序的技巧,它默认为当天的时间。然而,使用 DateInterval 检查当前时间是否在开始时间和结束时间之间似乎有点愚蠢。对于最近的几个 OS 版本,Date 对象是 Comparable,所以你可以说 if now >= start && now <= end
@DuncanC 我喜欢可读性。我也可以使用日期范围和模式匹配运算符并返回 start..<end ~= Date()
但 OP 对 Swift 来说似乎很新
就可读性(或者说缺乏可读性)而言,我个人讨厌模式匹配运算符。【参考方案2】:
您可以使用 Swift 的 Dateformatter()
来编码和比较日期:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm a"
dateFormatter.locale = Locale.init(identifier: "en_GB")
dateFormatter.defaultDate = Calendar.current.startOfDay(for: Date())
dateFormatter.amSymbol = "AM"
dateFormatter.pmSymbol = "PM"
let startTimeFormatted = dateFormatter.today.date(from: startTime)
let endTimeFormatted = dateFormatter.today.date(from: endTime)
//Now you can compare the two, e.g.
if startTimeFormatted > currentDate() && currentDate() < endTimeFormatted
return true
【讨论】:
您的代码存在一些问题。它应该是hh
而不是 h
。您应该使用语言环境“en_US_POSIX”。结果日期将是 2000 年 1 月 1 日而不是今天。
DateFormatter
上没有 today
实例属性。 dateFormatter.today
是错误的。只需使用普通的dateFormatter.whatever
。您仍在使用错误的语言环境。在发布答案之前,您应该始终尝试编译您的代码。
我忘了说你应该在设置dateFormat
属性之前设置语言环境。以上是关于Swift-检查当前时间是不是在两个时间字符串之间的主要内容,如果未能解决你的问题,请参考以下文章