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-检查当前时间是不是在两个时间字符串之间的主要内容,如果未能解决你的问题,请参考以下文章

检查当前日期是不是在两个日期之间 Oracle SQL

iOS,Swift中UTC登机时间与当前时间之间的差异

SQL函数检查日期是不是在另一个表的2个日期之间

如何检查字符串是不是已包含 Swift 中的字符 [重复]

如何在swift 3中检查字符串是不是为空? [复制]

如何在PHP中检查时间是不是在两次之间[重复]