CRe*_*Rey 29 date nsdateformatter date-formatting swift
我在跑步时遇到了撞车,它指向了dateFormmater.timezone.控制台中的错误是:
无法将'Swift.Optional'(0x1192bf4a8)类型的值转换为'NSTimeZone'(0x1192c0270).
价值rowEvents.date是"1480134638.0"
我试图从Firebase中取出一个Unix时间戳保存为字符串.将其转换为Date并再次将其保存为字符串,以便将其发布到单元格标签上.
我从StackOverflow获得了这段代码.我插入了我的数据,一切都很好,直到我运行它.我想一切都不是很好......
if let lastUpdated : String = rowEvents.date {
let epocTime = TimeInterval(lastUpdated)! / 1000 // convert it from milliseconds dividing it by 1000
let unixTimestamp = NSDate(timeIntervalSince1970: epocTime) //convert unix timestamp to Date
let dateFormatter = DateFormatter()
dateFormatter.timeZone = NSTimeZone() as TimeZone!
dateFormatter.locale = NSLocale.current // NSLocale(localeIdentifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
dateFormatter.date(from: String(describing: unixTimestamp))
let updatedTimeStamp = unixTimestamp
let cellDate = DateFormatter.localizedString(from: updatedTimeStamp as Date, dateStyle: DateFormatter.Style.full, timeStyle: DateFormatter.Style.medium)
cell.subtitleLabel.text = cellDate
}
Run Code Online (Sandbox Code Playgroud)
结果来自这里的代码:
let myTimeStamp = self.datePicker?.date.timeIntervalSince1970
let calendarDate = String(describing: myTimeStamp! /** 1000*/)
Run Code Online (Sandbox Code Playgroud)
Nir*_*v D 94
您可以unixTimestamp使用转换为日期Date(timeIntervalSince1970:).
let unixTimestamp = 1480134638.0
let date = Date(timeIntervalSince1970: unixTimestamp)
Run Code Online (Sandbox Code Playgroud)
如果要以特定的格式显示字符串中的日期,则可以使用DateFormatter这种方式.
let date = Date(timeIntervalSince1970: unixtimeInterval)
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(abbreviation: "GMT") //Set timezone that you want
dateFormatter.locale = NSLocale.current
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm" //Specify your format that you want
let strDate = dateFormatter.string(from: date)
Run Code Online (Sandbox Code Playgroud)
问题是这条线dateFormatter.timeZone = NSTimeZone() as TimeZone!.
只需使用TimeZone而不是NSTimeZone喜欢
dateFormatter.timeZone = TimeZone.current,您的代码将起作用.
你也可以删除你的/ 1000因为1480134638.0看起来更像秒而不是毫秒(自1970年以来).
斯威夫特 4.1。我创建了一个函数。只需在函数参数中传递时间戳,函数就会以字符串数据类型返回数据。您可以向 DateFormatter 对象添加更多属性。
func getDateFromTimeStamp(timeStamp : Double) -> String {
let date = NSDate(timeIntervalSince1970: timeStamp / 1000)
let dayTimePeriodFormatter = DateFormatter()
dayTimePeriodFormatter.dateFormat = "dd MMM YY, hh:mm a"
// UnComment below to get only time
// dayTimePeriodFormatter.dateFormat = "hh:mm a"
let dateString = dayTimePeriodFormatter.string(from: date as Date)
return dateString
}
Run Code Online (Sandbox Code Playgroud)