如何在 ios swift 中将 UNIX 纪元时间转换为日期和时间

问题描述 投票:0回答:4

我正在尝试使用以下代码将 UNIX 纪元时间转换为日期时间格式

var epocTime = NSTimeInterval(1429162809359)

let myDate = NSDate(timeIntervalSince1970: epocTime)
println("Converted Time \(myDate)")

实际结果是(Thu, 16 Apr 2015 05:40:09 GMT),但我得到类似(47258-05-14 05:15:59 +0000)的结果,任何人都可以告诉我如何实现这一点。

swift datetime unix-timestamp
4个回答
13
投票

更新:Xcode 8.2.1 • Swift 3.0.2 或更高版本

您需要将其从毫秒除以 1000 进行转换:

let epochTime = TimeInterval(1429162809359) / 1000
let date = Date(timeIntervalSince1970: epochTime)   // "Apr 16, 2015, 2:40 AM"

print("Converted Time \(date)")         // "Converted Time 2015-04-16 05:40:09 +0000\n"

5
投票

斯威夫特5

我正在处理 JSON api 中的日期,它被定义为 Int,时间戳的示例是 1587288545760 (UTC)

我可以以有意义的方式将该值显示为日期的唯一方法是截断最后 3 位数字并将结果日期转换为“yyyy-MM-dd'T'HH:mm:ss.SSS'Z ''

这是我为实现这一目标而创建的函数。

func convertDate(dateValue: Int) -> String {
    let truncatedTime = Int(dateValue / 1000)
    let date = Date(timeIntervalSince1970: TimeInterval(truncatedTime))
    let formatter = DateFormatter()
    formatter.timeZone = TimeZone(abbreviation: "UTC")
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
    return formatter.string(from: date)
}

它对我有用,我最终得到了一个如下所示的约会:

“2020-04-19T09:29:05.000Z”

..它反映了原始时间戳正是该日期的事实。

希望对遇到同样问题的人有所帮助。


-1
投票

您的时间信息似乎是“自 1970 年以来的毫秒数”。应该很容易弄清楚:我们是 1970 年之后大约 46 年,但你的日期是 1970 年之后大约 45,000 年。

NSTimeInterval 基于 SECONDS。

将您的数字转换为双倍并除以 1000.0。


-1
投票

您可以在 Double 上使用以下扩展

 extension Double {
    func getDateStringFromUnixTime(dateFormat:String) -> String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = dateFormat
        dateFormatter.timeZone = TimeZone.current
        return dateFormatter.string(from: Date(timeIntervalSince1970: self/1000))
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.