在Swift

时间:2016-10-08 15:19:40

标签: swift date time integer

我正在将Swift 3的一些旧的Swift 2答案更新为My answerthis question,但由于问题明确要求NSDate而不是{{},因此不容易更新{1}}。所以我正在创建该问题的新版本,我可以更新我的答案。

问题

如果我从这样的Date实例开始

Date

如何将其转换为整数?

相关但不同

这些问题提出了不同的问题:

3 个答案:

答案 0 :(得分:60)

let someDate = Date() Date

Int

执行// using current date and time as an example let someDate = Date() // convert Date to TimeInterval (typealias for Double) let timeInterval = someDate.timeIntervalSince1970 // convert to Integer let myInt = Int(timeInterval) Double转换会导致毫秒丢失。如果您需要毫秒,则在转换为Int之前乘以1000。

IntInt

包括完整性的反向。

Date

只要我保持一致,我本可以使用// convert Int to Double let timeInterval = Double(myInt) // create NSDate from Double (NSTimeInterval) let myNSDate = Date(timeIntervalSince1970: timeInterval) 代替timeIntervalSinceReferenceDate。这假设时间间隔以秒为单位。请注意,Java使用毫秒。

注意

  • 对于包含timeIntervalSince1970的旧版Swift 2语法,请参阅this answer

答案 1 :(得分:1)

timeIntervalSince1970是相关的开始时间,方便且由Apple提供。

如果您希望int值较小,则可以选择所需的相关开始时间

extension Date{
    var intVal: Int?{
        if let d = Date.coordinate{
             let inteval = Date().timeIntervalSince(d)
             return Int(inteval)
        }
        return nil
    }


    // today's time is close to `2020-04-17 05:06:06`

    static let coordinate: Date? = {
        let dateFormatCoordinate = DateFormatter()
        dateFormatCoordinate.dateFormat = "yyyy-MM-dd HH:mm:ss"
        if let d = dateFormatCoordinate.date(from: "2020-04-17 05:06:06") {
            return d
        }
        return nil
    }()
}


extension Int{
    var dateVal: Date?{
        // convert Int to Double
        let interval = Double(self)
        if let d = Date.coordinate{
            return  Date(timeInterval: interval, since: d)
        }
        return nil
    }
}

像这样使用:

    let d = Date()

    print(d)
    // date to integer, you need to unwrap the optional
    print(d.intVal)

    // integer to date
    print(d.intVal?.dateVal)

答案 2 :(得分:0)

如果您要通过 10 Digit milliseconds since 1970 寻找 时间戳 用于 API 调用,则下面是代码:

Swift 4 / Swift 5只需1行代码

let timeStamp = Date().timeIntervalSince1970

print(timeStamp) <-打印当前时间戳记

1587473264