比较没有日期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
仅考虑 hour
和 minute
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))
我正在使用 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
仅考虑hour
和minute
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))