比较没有日期swift3的时间

comparing time without date swift3

我正在使用 API 获取时间列表,一天五次,格式为 (AM,PM) 的字符串,没有日期,

("4:30 AM","1:00 PM","3:20: PM","6:40 PM","9:10 PM")

我想做的是在屏幕上显示下一个时间取决于 iPhone

上的当前时间

所以如果现在时间是 5:00 下午,屏幕上显示的时间应该是 6:40 下午

我如何在不包括日期的情况下比较 swift 中的时间,因为我试图将我必须的时间列表转换为 Date 类型,但不幸的是我得到的日期和日期显示在 2001 年,所以即使我尝试比较日期会给我错误的结果

 print(self._praytime.arraytime)




            for Dates in self._praytime.arraytime {
                let dateformatters = DateFormatter()
                dateformatters.dateStyle = .none
                dateformatters.timeStyle = .short
                let xxbbs = dateformatters.date(from: Dates)
                print(xxbbs!)
            }

得到时间后,我将它放入数组中,然后尝试执行上面的代码,这样我就可以得到没有日期的时间,但输出屏幕上显示的是这个

Optional(2000-01-01 11:14:00 +0000)
Optional(2000-01-01 20:06:00 +0000)
Optional(1999-12-31 23:57:00 +0000)
Optional(2000-01-01 03:11:00 +0000)
Optional(2000-01-01 04:41:00 +0000)

知道如何解决这个问题,如果有任何其他简单的方法来完成这个任务,我很高兴听到它

谢谢大家

建议使用 DateComponents

  • 假设这个给定的数组

    let times = ["4:30 AM","1:00 PM","3:20 PM","6:40 PM","9:10 PM"]
    
  • 创建与格式匹配的日期格式化程序

    let formatter = DateFormatter()
    formatter.dateFormat = "h:mm a"
    
  • 将时间字符串映射到 Date 并立即映射到 DateComponents 仅考虑 hourminute

    let dateArray = times.map { Calendar.current.dateComponents([.hour, .minute], from:formatter.date(from:[=12=])!) }
    
  • 将此数组映射到从现在开始分别匹配组件的下一个日期

    let upcomingDates = dateArray.map { Calendar.current.nextDate(after: Date(), matching: [=13=], matchingPolicy: .nextTime)!  }
    
  • 数组升序排列,第一项是你要查找的日期

    let nextDate = upcomingDates.sorted().first!
    
  • 使用格式化程序将日期转换回时间字符串

    print(formatter.string(from:nextDate))