我正在使用 API 来获取每天五次的时间列表(以(AM,PM)格式的字符串形式,不带日期,
(“上午 4:30”、“下午 1:00”、“下午 3:20”、“下午 6:40”、“下午 9:10”)
我想做的是在屏幕上显示下一次时间取决于iPhone上的当前时间
因此,如果现在时间是下午 5:00,则屏幕上显示的时间应为下午 6:40
如何在不包含日期的情况下快速比较时间,因为我尝试将时间列表转换为日期类型,但不幸的是我得到的日期和日期显示在 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
let dateArray = times.map { Calendar.current.dateComponents([.hour, .minute], from:formatter.date(from:$0)!) }
将此数组映射到从现在开始分别匹配组件的下一个日期
let upcomingDates = dateArray.map { Calendar.current.nextDate(after: Date(), matching: $0, matchingPolicy: .nextTime)! }
对数组进行升序排序,第一项是要查找的日期
let nextDate = upcomingDates.sorted().first!
使用格式化程序将日期转换回时间字符串
print(formatter.string(from:nextDate))
关于swift - 比较没有日期的时间 swift3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43957729/