swift - 比较没有日期的时间 ​​swift3

标签 swift date nsdateformatter

我正在使用 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/

相关文章:

SQL:如何计算可能重叠的日期范围之间的唯一天数?

java - 按 yyyymmdd 整数计算日差时结果不一致

c# - 表示日期和时间的最少字节数是多少?

iphone - CoreData - 如何设置彼此独立的日期和时间?

c# - 将日期时间从 iPhone 应用程序发送到网络服务

ios - swift 3 以编程方式填充字典

ios - 断言日期时测试失败

ios - 从类型的抛出函数进行无效转换 - swift 3

ios - DateFormatter 返回错误的时间

swift - 如何根据 CollectionView 中的索引路径快速删除部分?