swift - fecha - strtotime+1 day
¿Convertir una marca de tiempo Unix en fecha como cadena? Rápido (3)
Recibo un bloqueo al ejecutar y apunta al dateFormmater.timezone
. El error en la consola es:
No se pudo convertir el valor de tipo ''Swift.Optional'' (0x1192bf4a8) a ''NSTimeZone'' (0x1192c0270).
el valor de rowEvents.date
es "1480134638.0"
Estoy tratando de sacar una marca de tiempo Unix de Firebase guardada como una cadena. Conviértalo a Fecha y, de nuevo, guárdelo como una cadena para poder publicarlo en una etiqueta de celda.
Conseguí este código de StackOverflow. Conecté mis datos y todo está bien hasta que los ejecuto. Supongo que no todo está bien ...
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
}
El resultado vino de este código aquí:
let myTimeStamp = self.datePicker?.date.timeIntervalSince1970
let calendarDate = String(describing: myTimeStamp! /** 1000*/)
El problema es la línea dateFormatter.timeZone = NSTimeZone() as TimeZone!
.
Simplemente use TimeZone
lugar de NSTimeZone
como
dateFormatter.timeZone = TimeZone.current
y su código funcionará.
También puede eliminar su / 1000
porque 1480134638.0
parece más a segundos que a milisegundos (desde 1970).
Puede convertir unixTimestamp
a la fecha utilizando Date(timeIntervalSince1970:)
.
let unixTimestamp = 1480134638.0
let date = Date(timeIntervalSince1970: unixTimestamp)
Si desea mostrar la fecha en una cadena con formato específico, puede utilizar DateFormatter
esta manera.
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)
Swift 4.1. He creado una función. Simplemente pase su timeStamp en la función param y la función devolverá los datos en el tipo de datos de cadena. Puede agregar más propiedades al objeto DateFormatter.
func getDateFromTimeStamp(timeStamp : Double) -> String {
let date = NSDate(timeIntervalSince1970: timeStamp)
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
}