Puedo obtener un accidente cuando se ejecuta y se apunta a la dateFormmater.timezone.
El error en la consola es:

No pudieron echar valor de tipo ‘Swift.Opcional’ (0x1192bf4a8) a ‘NSTimeZone’ (0x1192c0270).

el valor de rowEvents.date es "1480134638.0"

Estoy tratando de sacar un timestamp de Unix de Firebase guarda como una cadena. Convertir a la Fecha y, de nuevo, guardar una cadena de texto para que yo pueda publicar en una celda de la etiqueta.

Tengo este código de StackOverflow. He conectado mis datos y todo está bien hasta que me corra. Supongo que todo lo que no es del todo bueno…

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

OriginalEl autor CRey | 2016-11-17

5 Comentarios

  1. 83

    Puede convertir unixTimestamp hasta la fecha utilizando Date(timeIntervalSince1970:).

    let unixTimestamp = 1480134638.0
    let date = Date(timeIntervalSince1970: unixTimestamp)

    Si desea mostrar la fecha en la cadena específicas de formato que puede utilizar DateFormatter como de 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)
    TimeZone(abbreviation: "GMT") — finalmente, alguien ha usado TimeZone constructores en lugar de NSTimeZone con la colada.
    Muchas gracias señor! thhat superior resuelto porque no me importaba en qué formato. Estoy seguro de que la parte inferior del código de wouldve demasiado si necesitaba un formato determinado. Voy a mantener ambos códigos en mente la próxima vez tengo que hacer conversiones!!!
    Bienvenido compañero 🙂
    Puede actualizar esta para swift 4.1. No hay ningún método como el de esta Fecha(timeIntervalSince1970: unixTimestamp)
    usted sólo tiene que conseguir el objeto date con DateFormatter método date(from:) una vez Date objeto de que usted puede conseguir fácilmente la fecha y hora en que

    OriginalEl autor Nirav D

  2. 7

    El problema es la línea dateFormatter.timeZone = NSTimeZone() as TimeZone!.

    Simplemente utilizar TimeZone en lugar de NSTimeZone como

    dateFormatter.timeZone = TimeZone.current y el código de trabajo.

    También puede eliminar su /1000 porque 1480134638.0 se parece más a segundos de milisegundos (desde 1970).

    Gracias, señor! saqué el /1000 porque de tu sugerencia.
    Gracias por la sugerencia! Se está haciendo bien después de /1000

    OriginalEl autor d.felber

  3. 2

    Swift 4.1. He creado una función. Acaba de pasar timeStamp en función param y la función devolverá datos tipo de datos de cadena. Usted puede agregar más propiedades para DateFormatter objeto.

    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
        }
    se está dando error en la penúltima línea «No se puede convertir el valor de tipo ‘NSDate’ de tipo ‘Fecha’ en la coerción»

    OriginalEl autor GSK

  4. 0

    Esta solución es válida para swift 3 -> 4.2 :

    puede agregar una extensión del Doble que devuelve la fecha en formato:

    extension Double {
    
    
        //returns the date formatted.    
        var dateFormatted : String? {
            let date = Date(timeIntervalSince1970: self)
            let dateFormatter = DateFormatter()
            dateFormatter.timeStyle = DateFormatter.Style.none //Set time style
            dateFormatter.dateStyle = DateFormatter.Style.short //Set date style
            return dateFormatter.string(from: date)
         }
    
        //returns the date formatted according to the format string provided. 
        func dateFormatted(withFormat format : String) -> String{
             let date = Date(timeIntervalSince1970: self)
             let dateFormatter = DateFormatter()
             dateFormatter.dateFormat = format
             return dateFormatter.string(from: date)
        }
    
    }

    ejemplo en el caso anterior :

    let timeStamp = 82749029.0
    print(timeStamp. dateFormatted)
    //output
    //12/11/1994
    
    
    
    let timeStamp = 82749029.0
    print(timeStamp. dateFormatted(withFormat : "MM-dd-yyyy HH:mm"))
    //output
    //12-11-1994 13:04

    OriginalEl autor MhmdRizk

  5. 0

    El uso de patio de recreo de todo lo que hice fue esto.

    let epochTime = 1547855446
    let newTime = Date(timeIntervalSince1970: TimeInterval(epochTime))
    print(newTime)

    Devuelve esto – 2019-01-18 23:50:46 +0000

    OriginalEl autor wilkinsonncl

Dejar respuesta

Please enter your comment!
Please enter your name here