【问题标题】:Convert Date to Integer in Swift在 Swift 中将日期转换为整数
【发布时间】:2017-02-17 10:41:39
【问题描述】:

我正在更新我对 Swift 3 的一些旧 Swift 2 答案。不过,My answerthis question 并不容易更新,因为该问题专门要求 NSDate 而不是 Date。因此,我正在创建该问题的新版本,我可以更新我的答案。

问题

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

let someDate = Date()

如何将其转换为整数?

相关但不同

这些问题问的是不同的问题:

【问题讨论】:

    标签: swift date time integer


    【解决方案1】:

    DateInt

    // 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)
    

    执行DoubleInt 的转换会导致毫秒数丢失。如果您需要毫秒数,请乘以 1000,然后再转换为 Int

    IntDate

    为了完整起见,包括相反的内容。

    // convert Int to TimeInterval (typealias for Double)
    let timeInterval = TimeInterval(myInt)
    
    // create NSDate from Double (NSTimeInterval)
    let myNSDate = Date(timeIntervalSince1970: timeInterval)
    
    I could have also used `timeIntervalSinceReferenceDate` instead of `timeIntervalSince1970` as long as I was consistent. This is assuming that the time interval is in seconds. Note that Java uses milliseconds.
    

    注意

    • 对于带有 NSDate 的旧 Swift 2 语法,请参阅 this answer

    【讨论】:

    • 关于 Java 的好点,这就是为什么你不能在 Java 中真正将 Date 转换为 Integer,因为它根本不足以容纳这样的值。在 Java 中,您需要为此使用 long。参考:stackoverflow.com/questions/12067697/…
    【解决方案2】:

    如果您正在寻找 timestamp10 Digit seconds since 1970 以进行 API 调用,那么下面是代码:

    Swift 4/Swift 5 只需 1 行代码

    let timeStamp = UInt64(Date().timeIntervalSince1970)

    print(timeStamp)

    1587473264

    let timeStamp = UInt64((Date().timeIntervalSince1970) * 1000) // will give 13 digit timestamp in milli seconds
    

    【讨论】:

    • 可以用于 API 调用,因为他们希望代码上面的 10 位时间戳应该可以达到目的
    • 这是不正确的。 Date().timeIntervalSince1970 将以秒为单位返回一个 Double 值。如果您希望它以毫秒为单位,则需要乘以 1000。无论哪种方式,您仍然需要将其转换为 Int64:Int64(timeStamp * 1000)
    【解决方案3】:

    timeIntervalSince1970是相关的开始时间,方便,苹果提供。

    如果你希望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)
    

    【讨论】:

      猜你喜欢
      • 2021-08-17
      • 2018-10-16
      • 2022-07-07
      • 1970-01-01
      • 2019-04-22
      • 2015-04-17
      • 1970-01-01
      相关资源
      最近更新 更多