如何在swift3中检查当前字符串是24小时格式时还是12小时格式时?

时间:2017-09-11 09:09:10

标签: ios date swift3 xcode8.2

我从Web服务获取一个特定的字符串,这实际上是一个时间。所以我想检查我从Web服务获得的字符串是否是24小时格式。我已成功使用此代码附加AM和Pm:

let dateAsString = "13:15"
  let dateFormatter = DateFormatter()
  dateFormatter.dateFormat = "HH:mm"

  let date = dateFormatter.date(from: dateAsString)
  dateFormatter.dateFormat = "h:mm a"
  let Date12 = dateFormatter.string(from: date!)
  print("12 hour formatted Date:",Date12)

但是我想知道“13:15”是否大于“12:00”,因为这次我是从网络服务获得的。

3 个答案:

答案 0 :(得分:2)

只需传递12小时日期格式并检查nil

即可
let dateAsString = "13:15"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm"
let is24HourFormat = dateFormatter.date(from: dateAsString) == nil

答案 1 :(得分:1)

你所做的只是将日期格式化为可读的字符串.. 但你真正想要的是比较日期:

请参阅下一个示例,比较两个日期[Swift 3.1]

func compareDates() {

    let date1 = Date() // now
    let date2 = Date().addingTimeInterval(20) // now+20secodns

    switch date1.compare(date2) // return ComparisonResult
    {
    case .orderedAscending:
       print("date1 < date2")

    case .orderedDescending:
       print("date1 > date2")

    case .orderedSame:
       print("date1 == date2")
    }

}

如果你想比较你已经24小时格式和字符串的时间,你可以只使用字符串的正常比较,但我不推荐这个

/// compare only times in 24h format in strings

func compareTimesInStrings() {

   let time1 = "13:00"
   let time2 = "09:05"

   if time1 < time2 {
        print("time1 < time2")

   } else if time1 > time2 {
        print("time1 > time2")

   } else {
        print("time1 == time2")

   }   

}

答案 2 :(得分:0)

可能这是一个很长的答案。但这是另一种方式:

let dateAsString = "13:15"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"

if let date = dateFormatter.date(from: dateAsString) {
    dateFormatter.dateFormat = "h:mm a"
    let Date12 = dateFormatter.string(from: date)
    let amRange = Date12.range(of: dateFormatter.amSymbol)
    let pmRange = Date12.range(of: dateFormatter.pmSymbol)

    if pmRange == nil {
        print("12 hours")
    } else if amRange == nil {
        print("24 hours")
    }
} else {
    print("not in the time range") // if dateAsString is > 23:59
}