【问题标题】:Unix time stamp conversion issue in swift 3swift 3中的Unix时间戳转换问题
【发布时间】: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


【解决方案1】:

您的代码中的主要错误是月份的日期格式错误, 应该是“MM”,而不是“mm”(表示分钟)。

除此之外,您的方法太复杂了。所有你必须 do是将时间戳(以毫秒为单位)除以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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-23
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    相关资源
    最近更新 更多