Converting a Unix timestamp into Date as String? Swift

I get a crash when running and it points at the dateFormmater.timezone.
The error in the console is:

Could not cast value of type ‘Swift.Optional’ (0x1192bf4a8) to ‘NSTimeZone’ (0x1192c0270).

  • IOS Coredata compatible with both IOS 9 and ios 10
  • Is there a way to open urls received in a push notification without opening the app in ios 10?
  • NSDate returns wrong date on the first of month
  • Using Data in Rich Push notification on iOS with FCM
  • Whatsapp integration and openURL issue in iOS 10
  • SVG transform rotate by 90, 180 or 270 degrees not working on circle in Safari iOS 10
  • the value of rowEvents.date is "1480134638.0"

    Im trying to pull out a Unix timestamp from Firebase saved as a string. Convert it to Date and again save it as a string so I can post it on a cell label.

    I got this code from StackOverflow. I plugged in my data and everything is all good until I run it. I guess everything is not all good…

    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              
    }
    

    The result came from this code here:

    let myTimeStamp = self.datePicker?.date.timeIntervalSince1970
    
    let calendarDate = String(describing: myTimeStamp! /** 1000*/)
    

    2 Solutions Collect From Internet About “Converting a Unix timestamp into Date as String? Swift”

    You can convert unixTimestamp to date using Date(timeIntervalSince1970:).

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

    If you want to display date in string with specific formate than you can use DateFormatter like this way.

    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)
    

    The problem is the line dateFormatter.timeZone = NSTimeZone() as TimeZone!.

    Simply use TimeZone instead of NSTimeZone like
    dateFormatter.timeZone = TimeZone.current and your code will work.

    You might also remove your / 1000 because 1480134638.0 looks more like seconds than milliseconds (since 1970).