【发布时间】:2017-04-21 05:45:27
【问题描述】:
我正在尝试从服务器转换时间戳,它也在转换,但只有月份出错了。就像时间戳是 1492747393892,它转换为 21/03/17 - 12:03PM 但它应该是 21/04/17 - 下午 12:03。 这是我的代码
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)
}
【问题讨论】:
-
您的代码无法按原样编译,可能是
init?(jsonTimeDate: String)方法(看起来与stackoverflow.com/a/28854733/1187415 中的代码惊人地相似:)和dateTime方法应该在extension Date { }中。 -
除此之外,您的月份日期格式是错误的,应该是“MM”,而不是“mm”。
-
它通过将“mm”更改为“MM”来工作。感谢您的帮助。
-
请注意,您的转换代码太复杂了,根本不需要 JSON 日期的东西。时间戳以毫秒为单位,您只需将其除以 1000,比较 stackoverflow.com/a/30109484/1187415。
-
谢谢。我会做的改变。
标签: swift