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
,并检查它是否包含nowdate()
:
您是否已经厌倦了获取相当于日期+时间的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