Ios Swfit-检查当前时间是否在两个时间字符串之间

Ios Swfit-检查当前时间是否在两个时间字符串之间,ios,swift,Ios,Swift,如何检查当前时间是否在以下格式的两个时间字符串之间。 HH:MM AM/PM 说如果 如何检查currentTime()值是否在开始时间和结束时间之间?您可以使用Swift的Dateformatter()对日期进行编码和比较: let dateFormatter = DateFormatter() dateFormatter.dateFormat = "hh:mm a" dateFormatter.locale = Locale.init(identifier: "

如何检查当前时间是否在以下格式的两个时间字符串之间。
HH:MM AM/PM
说如果


如何检查
currentTime()
值是否在开始时间和结束时间之间?

您可以使用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
}
let dateFormatter=dateFormatter()
dateFormatter.dateFormat=“hh:mm a”
dateFormatter.locale=locale.init(标识符:“en_GB”)
dateFormatter.defaultDate=Calendar.current.startOfDay(for:Date())
dateFormatter.amSymbol=“AM”
dateFormatter.pmSymbol=“PM”
让startTimeFormatted=dateFormatter.today.date(from:startTime)
让endTimeFormatted=dateFormatter.today.date(from:endTime)
//现在你可以比较这两者,例如。
如果startTimeFormatted>currentDate()&¤tDate()
您可以为今天设置日期格式化程序
defaultDate
,解析日期字符串,创建带有开始日期和结束日期的
DateInterval
,并检查它是否包含now
date()




您是否已经厌倦了获取相当于日期+时间的Unix时间戳,然后比较这三个值。时间戳不应低于开始时间而高于结束时间我从API获得开始和结束日期,因此Unix时间戳不可能。您可以使用正常的swift功能来比较时间戳……我将给出一个示例您的代码存在一些问题。它应该是
hh
,而不是
h
。您应该使用区域设置“en_US_POSIX”。生成的日期将是2000年1月1日,而不是今天。
DateFormatter
上没有
today
实例属性<代码>日期格式化程序。今天是错误的。只需使用普通的
日期格式化程序。您仍在使用错误的区域设置。在发布答案之前,您应该始终尝试编译代码。我忘了提到您应该在设置
dateFormat
属性之前设置区域设置。我喜欢
today
格式化程序的技巧,它默认为当天的时间。然而,使用DateInterval检查当前时间是否介于开始时间和结束时间之间似乎有点愚蠢。在最近的几个操作系统版本中,日期对象是可比较的,所以你可以说
if now>=start&&now@duncac我喜欢可读性。我还可以使用日期范围和模式匹配操作符,并返回
start..I个人讨厌模式匹配操作符的可读性(或者说缺乏可读性)
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
}
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