【问题标题】:Comparing Time in ios Swift在 ios Swift 中比较时间
【发布时间】:2019-07-03 07:50:24
【问题描述】:

我得到两个这种格式的日期字符串,“08:00:00”来自服务器端作为开始槽或结束槽。我必须获取本地时区的时间,然后检查当前时间是否位于来自服务器的时间间隔之间。 但我无法进行比较。

func checkTime() -> Bool {


            let dateFormatter: DateFormatter = DateFormatter()
            dateFormatter.dateFormat = "HH:mm:ss"
        dateFormatter.timeZone = TimeZone(identifier: "PKT")


            let startingSlot = self.selectedArea.startingSlot! //UTC
            let endingSlot = self.selectedArea.endingSlot! //UTC
            let date = Date().description(with: Locale.current)
            let current = date.split(separator: " ")
        let currentD:String = String(current[5])

            let date1: Date = dateFormatter.date(from: startingSlot)!
            let date2: Date = dateFormatter.date(from: endingSlot)!
        let currentdate:Date = dateFormatter.date(from: currentD)!

            print(date1)
            print(date2)
            print(current)

            if(currentdate >= date1 && currentdate <= date2) {
                return true
            } else {
                return false
            }
        }

如果当前日期时间在 date1 和 date2 之间,我希望得到 true。

【问题讨论】:

  • 如果你 print(date1, date2, Date()) 那么你应该会看到问题。
  • @Sumyia,你能提供你从服务器接收到的日期字符串吗?
  • 很可能与stackoverflow.com/q/47682631/1187415中的问题相同。
  • startingSlot 字符串? “09:00:00”一些结尾槽字符串? “03:00:00”一些

标签: ios swift xcode date time


【解决方案1】:

通过忽略日期部分来比较时间 -

func checkTime() -> Bool {

let dateFormatter: DateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(abbreviation: "PKT")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

let startingSlot = "2000-01-01 08:00:00" //UTC
let endingSlot = "2000-01-01 23:00:00" //UTC

let date = Date()

let date1: Date = dateFormatter.date(from: startingSlot)!
let date2: Date = dateFormatter.date(from: endingSlot)!

let currentTime = 60*Calendar.current.component(.hour, from: date) + Calendar.current.component(.minute, from: date) + (Calendar.current.component(.second, from: date)/60) // in minutes
let time1 = 60*Calendar.current.component(.hour, from: date1) + Calendar.current.component(.minute, from: date1) + (Calendar.current.component(.second, from: date1)/60) // in minutes
let time2 =  60*Calendar.current.component(.hour, from: date2) + Calendar.current.component(.minute, from: date2) + (Calendar.current.component(.second, from: date1)/60) // in minutes

print(currentTime)
print(time1)
print(time2)

if(currentTime >= time1 && currentTime <= time2) {
    return true
} else {
    return false
}

}

输出-

1121
510
1410
真的

【讨论】:

  • 我正在更新我的代码。主要问题是时区。当我使用 dateformattor 转换我的日期时,它会附加一个虚拟日期值,从而产生问题。
  • currentdate 日期 1999-12-31 23:42:19 UTC 日期2 日期 2000-01-01 12:00:00 UTC 日期1 日期 2000-01-01 08:00:00 UTC
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 2017-05-29
  • 1970-01-01
  • 2016-07-28
  • 2017-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多