Swift将unix时间转换为date和时间

我目前的代码。

if let var timeResult = (jsonResult["dt"] as? Double) { timeResult = NSDate().timeIntervalSince1970 println(timeResult) println(NSDate()) } 

结果

println(timeResult)= 1415639000.67457

println(NSdate())= 2014-11-10 17:03:20 +0000只是testing,看看NSdate提供了什么。

我希望第一个看起来像最后一个。 dt = 1415637900的值。

另外我怎样才能调整时区? 在iOS上运行。

您可以通过使用NSDate(withTimeIntervalSince1970:)初始值设定项来获得具有该值的date:

 let date = NSDate(timeIntervalSince1970: 1415637900) 

将Unix时间戳转换为所需的格式很简单。 让我们假设_ts是Unix的时间戳

 let date = NSDate(timeIntervalSince1970: _ts) let dayTimePeriodFormatter = NSDateFormatter() dayTimePeriodFormatter.dateFormat = "MMM dd YYYY hh:mm a" let dateString = dayTimePeriodFormatter.stringFromDate(date) print( " _ts value is \(_ts)") print( " _ts value is \(dateString)") 

要获取显示为当前时区的date,我使用了以下内容。

 if let timeResult = (jsonResult["dt"] as? Double) { let date = NSDate(timeIntervalSince1970: timeResult) let dateFormatter = NSDateFormatter() dateFormatter.timeStyle = NSDateFormatterStyle.MediumStyle //Set time style dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle //Set date style dateFormatter.timeZone = NSTimeZone() let localDate = dateFormatter.stringFromDate(date) self.defaults.setObject(localDate, forKey: "localdate") } 

Swift 3.0版本

  if let timeResult = (jsonResult["dt"] as? Double) { let date = NSDate(timeIntervalSince1970: timeResult) let dateFormatter = DateFormatter() dateFormatter.timeStyle = DateFormatter.Style.medium //Set time style dateFormatter.dateStyle = DateFormatter.Style.medium //Set date style dateFormatter.timeZone = NSTimeZone() as TimeZone! let localDate = dateFormatter.stringFromDate(date) self.defaults.setObject(localDate, forKey: "localdate") } 

更新Swift 3.1

 if let timeResult = (jsonResult["dt"] as? Double) { let date = NSDate(timeIntervalSince1970: TimeInterval(timeReuslt)) let dateFormatter = DateFormatter() dateFormatter.timeStyle = DateFormatter.Style.medium //Set time style dateFormatter.dateStyle = DateFormatter.Style.medium //Set date style dateFormatter.timeZone = TimeZone.current let localDate = dateFormatter.string(from: date as Date) } 

为了在Swift 3中pipe理date,我结束了这个帮助函数:

 extension Double { func getDateStringFromUTC() -> String { let date = Date(timeIntervalSince1970: self) let dateFormatter = DateFormatter() dateFormatter.locale = Locale(identifier: "en_US") dateFormatter.dateStyle = .medium return dateFormatter.string(from: date) } } 

这种方式很容易使用,只要你需要它 – 在我的情况下,它正在转换一个string:

 ("1481721300" as! Double).getDateStringFromUTC() // "Dec 14, 2016" 

引用DateFormatter文档以获取格式化的更多细节(请注意,某些示例已过时)

我发现这篇文章也很有帮助

这里是我的一个应用程序工作的Swift 3解决scheme。

 /** * * Convert unix time to human readable time. Return empty string if unixtime * argument is 0. Note that EMPTY_STRING = "" * * @param unixdate the time in unix format, eg 1482505225 * @param timezone the user's time zone, eg EST, PST * @return the date and time converted into human readable String format * **/ private func getDate(unixdate: Int, timezone: String) -> String { if unixdate == 0 {return EMPTY_STRING} let date = NSDate(timeIntervalSince1970: TimeInterval(unixdate)) let dayTimePeriodFormatter = DateFormatter() dayTimePeriodFormatter.dateFormat = "MMM dd YYYY hh:mm a" dayTimePeriodFormatter.timeZone = NSTimeZone(name: timezone) as TimeZone! let dateString = dayTimePeriodFormatter.string(from: date as Date) return "Updated: \(dateString)" } 
 func timeStringFromUnixTime(unixTime: Double) -> String { let date = NSDate(timeIntervalSince1970: unixTime) // Returns date formatted as 12 hour time. dateFormatter.dateFormat = "hh:mm a" return dateFormatter.stringFromDate(date) } func dayStringFromTime(unixTime: Double) -> String { let date = NSDate(timeIntervalSince1970: unixTime) dateFormatter.locale = NSLocale(localeIdentifier: NSLocale.currentLocale().localeIdentifier) dateFormatter.dateFormat = "EEEE" return dateFormatter.stringFromDate(date) } 

无论如何@Nate Cook的答案被接受,但我想用更好的date格式来改善它。

Swift 2.2 ,我可以得到所需的格式化date

 //TimeStamp let timeInterval = 1415639000.67457 print("time interval is \(timeInterval)") //Convert to Date let date = NSDate(timeIntervalSince1970: timeInterval) //Date formatting let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "dd, MMMM yyyy HH:mm:a" dateFormatter.timeZone = NSTimeZone(name: "UTC") let dateString = dateFormatter.stringFromDate(date) print("formatted date is = \(dateString)") 

结果是

时间间隔是1415639000.67457

格式化的date是= 10,2014年11月17日03:PM

迅速:

 extension Double { func getDateStringFromUnixTime(dateStyle: DateFormatter.Style, timeStyle: DateFormatter.Style) -> String { let dateFormatter = DateFormatter() dateFormatter.dateStyle = dateStyle dateFormatter.timeStyle = timeStyle return dateFormatter.string(from: Date(timeIntervalSince1970: self)) } }