【问题标题】:How to check if the current string is in 24 hour format time or 12 hour format time in swift3?如何在swift3中检查当前字符串是24小时格式时间还是12小时格式时间?
【发布时间】:2018-02-19 11:23:39
【问题描述】:

我从 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”,因为这次我是从网络服务获取的。

【问题讨论】:

    标签: ios date swift3 xcode8.2


    【解决方案1】:

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

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

    【讨论】:

    • 您必须设置语言环境,否则 iOS 将覆盖您的 12/24 设置!
    【解决方案2】:

    您所做的只是将日期格式化为可读的字符串。 但你真正要寻找的是日期之间的比较:

    查看下一个比较两个日期的示例 [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")
    
       }   
    
    }
    

    【讨论】:

    • 不要使用date1.compare(date2),你可以直接使用date1 &lt; date2
    【解决方案3】:

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

    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
    }
    

    【讨论】:

      猜你喜欢
      • 2011-11-18
      • 2021-05-09
      • 2012-07-08
      • 2011-10-15
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多