swift - 你如何比较 Swift 中日期的时间?

标签 swift sorting date datetime time

我有两个日期对象:

  1. 2017-01-13 11:40:17 +0000

  2. 2016-03-15 10:22:14 +0000

我只需要比较这些值的时间而忽略日期

示例:12:00am 和 12:01am,12:01 更晚,所以 (12:01am > 12:00am) == true

最佳答案

这是我最后走的路线,这样可以很方便的在swift中只比较一个Date的时间

新对象时间:

class Time: Comparable, Equatable {
init(_ date: Date) {
    //get the current calender
    let calendar = Calendar.current

    //get just the minute and the hour of the day passed to it
    let dateComponents = calendar.dateComponents([.hour, .minute], from: date)

        //calculate the seconds since the beggining of the day for comparisions
        let dateSeconds = dateComponents.hour! * 3600 + dateComponents.minute! * 60

        //set the varibles
        secondsSinceBeginningOfDay = dateSeconds
        hour = dateComponents.hour!
        minute = dateComponents.minute!
    }

    init(_ hour: Int, _ minute: Int) {
        //calculate the seconds since the beggining of the day for comparisions
        let dateSeconds = hour * 3600 + minute * 60

        //set the varibles
        secondsSinceBeginningOfDay = dateSeconds
        self.hour = hour
        self.minute = minute
    }

    var hour : Int
    var minute: Int

    var date: Date {
        //get the current calender
        let calendar = Calendar.current

        //create a new date components.
        var dateComponents = DateComponents()

        dateComponents.hour = hour
        dateComponents.minute = minute

        return calendar.date(byAdding: dateComponents, to: Date())!
    }

    /// the number or seconds since the beggining of the day, this is used for comparisions
    private let secondsSinceBeginningOfDay: Int

    //comparisions so you can compare times
    static func == (lhs: Time, rhs: Time) -> Bool {
        return lhs.secondsSinceBeginningOfDay == rhs.secondsSinceBeginningOfDay
    }

    static func < (lhs: Time, rhs: Time) -> Bool {
        return lhs.secondsSinceBeginningOfDay < rhs.secondsSinceBeginningOfDay
    }

    static func <= (lhs: Time, rhs: Time) -> Bool {
        return lhs.secondsSinceBeginningOfDay <= rhs.secondsSinceBeginningOfDay
    }


    static func >= (lhs: Time, rhs: Time) -> Bool {
        return lhs.secondsSinceBeginningOfDay >= rhs.secondsSinceBeginningOfDay
    }


    static func > (lhs: Time, rhs: Time) -> Bool {
        return lhs.secondsSinceBeginningOfDay > rhs.secondsSinceBeginningOfDay
    }
}

方便访问的日期扩展: //添加从日期获取时间的能力:

extension Date {
    var time: Time {
        return Time(self)
    }
}

例子:

let firstDate = Date()
let secondDate = firstDate

//Will return true
let timeEqual = firstDate.time == secondDate.time

关于swift - 你如何比较 Swift 中日期的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41646542/

相关文章:

ruby-on-rails - 让最终用户在 Rails 中指定排序顺序的最佳方式

java - 16 位时间戳转 Java 日期格式

Swift 3.0 将字符串转换为日期

ios - Swift Midi Soundbank没有播放

ios - 如何让简单的盒子在scenekit中渲染?

ios - 音频切割器原生 iOS 元素

c - Gasport 或 Shell Sort 无法正确滑动

swift - 如何指定各个导航栏的标题颜色? swift

java - 根据可以为空的字段对对象列表进行排序

c# - 日期之间的 Linq 查询