一天中的时间没有标准类型。一个合理的类型开始只是一个元组:
typealias TimeOfDay = (hour: Int, minute: Int, second: Int)
要创建这些TimeOfDay 值,您需要Calendar。默认情况下,Calendar 使用设备的系统范围的时区。如果您不想这样,请明确设置Calendar 的时区。示例:
var calendar = Calendar.autoupdatingCurrent
calendar.timeZone = TimeZone(abbreviation: "UTC")!
现在您可以使用DateFormatter 将字符串转换为Dates(如有必要),然后使用calendar 从Dates 中提取时间组件:
let strings: [String] = ["2017-01-13 11:40:17 +0000", "2016-03-15 10:22:14 +0000"]
let parser = DateFormatter()
parser.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
let timesOfDay: [TimeOfDay] = strings.map({ (string) -> TimeOfDay in
let components = calendar.dateComponents([.hour, .minute, .second], from: parser.date(from: string)!)
return (hour: components.hour!, minute: components.minute!, second: components.second!)
})
Swift.print(timesOfDay)
// Output: [(11, 40, 17), (10, 22, 14)]
最后,您可以比较这些TimeOfDay 值。 Swift 为元素为Comparable 的元组提供了标准的比较运算符,因此TimeOfDay 类型符合条件。你可以这样说:
if timesOfDay[0] < timesOfDay[1] {
Swift.print("date[0] comes first")
} else if timesOfDay[0] == timesOfDay[1] {
Swift.print("times are equal")
} else {
Swift.print("date[1] comes first")
}