2017-04-21 65 views
1

我試圖從服務器轉換時間戳,它也在轉換,但只有一個月會出錯。像時間戳是1492747393892,它轉換成21/03/17 - 12:03 PM但應該是21/04/17 - 12:03 PM。 這裏是我的代碼在swift 3中的Unix時間戳轉換問題

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) 
} 
+0

您的代碼不能編譯,因爲它代表,可能是'的init(jsonTimeDate:字符串)?'方法(它看起來與http://stackoverflow.com/a/28854733/1187415 :)中的代碼有驚人的相似性,並且'dateTime'方法應該在'extension Date {}'內部。 –

+2

除此之外,你月份的日期格式是錯誤的,它應該是「MM」,而不是「mm」。 –

+0

它通過將「mm」更改爲「MM」來工作。謝謝您的幫助。 – manku

回答

2

在你的代碼的主要錯誤是月, 這應該是「MM」,而不是「MM」(這對於分鐘)錯誤的日期格式。

除此之外,你的方法太複雜了。所有您需要 做的就是1000 劃分時間戳(以毫秒),並調用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