manku
manku

Reputation: 13

Unix time stamp conversion issue in swift 3

I am trying to convert the timestamp from server and it is converting also but only month is coming wrong.Like timestamp is 1492747393892 and it convert into 21/03/17 - 12:03PM but it should be 21/04/17 - 12:03PM. Here is my code

var arriveTimestamp: Int 
if let timeStampToDate = arriveTimestamp {
                    let timeSt = Date(jsonTimeDate:"/Date(\(timeStampToDate))/")
                    let time = Date().dateTime(date: timeSt!)
                    valueLbl.text = time
                }

   init?(jsonTimeDate: String) {
    //        "/Date(1487058855745)/"

    let prefix = "/Date("
    let suffix = ")/"
    let scanner = Scanner(string: jsonTimeDate)

    // Check prefix:
    guard scanner.scanString(prefix, into: nil)  else { return nil }

    // Read milliseconds part:
    var milliseconds : Int64 = 0
    guard scanner.scanInt64(&milliseconds) else { return nil }
    // Milliseconds to seconds:
    var timeStamp = TimeInterval(milliseconds)/1000.0

    // Read optional timezone part:
    var timeZoneOffset : Int = 0
    if scanner.scanInt(&timeZoneOffset) {
        let hours = timeZoneOffset / 100
        let minutes = timeZoneOffset % 100
        // Adjust timestamp according to timezone:
        timeStamp += TimeInterval(3600 * hours + 60 * minutes)
    }

    // Check suffix:
    guard scanner.scanString(suffix, into: nil) else { return nil }

    // Success! Create NSDate and return.
    self.init(timeIntervalSince1970: timeStamp)
}

func dateTime(date: Date) -> String {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd/mm/yy - hh:mm a"
    return dateFormatter.string(from: date as Date)
}

Upvotes: 1

Views: 1054

Answers (1)

Martin R
Martin R

Reputation: 539735

The main error in your code is the wrong date format for the month, which should be "MM", not "mm" (which is for the minutes).

Apart from that, your approach is far too complicated. All you have to do is to divide the timestamp (which is in milliseconds) by 1000 and call Date(timeIntervalSince1970:):

let arriveTimestamp = 1492747393892
let date = Date(timeIntervalSince1970: TimeInterval(arriveTimestamp)/1000)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yy - hh:mm a"
let text = dateFormatter.string(from: date)

print(text) // 21/04/17 - 06:03 AM

Upvotes: 2

Related Questions