Ios FirebaseServerValue.timestamp()提供未来时间

Ios FirebaseServerValue.timestamp()提供未来时间,ios,swift,firebase,Ios,Swift,Firebase,我正在使用observeEventType.ChildAdded加载所有消息,其中包括来自Firebase服务器的所有时间戳。问题是Firebase总是首先触发占位符时间戳(也称为本地时间),然后用第二次回调替换它,该回调具有来自服务器的正确时间戳。此行为需要两次加载消息页以获得正确的时间戳,因为第一次只显示本地时间。我找到了一种只显示正确时间戳的方法。通过使用.ChildChanged,我可以忽略第一个时间戳,只检索第二个时间戳。然而,这回电话给了我未来的时间,正好提前一小时两分钟,我不知道如

我正在使用observeEventType.ChildAdded加载所有消息,其中包括来自Firebase服务器的所有时间戳。问题是Firebase总是首先触发占位符时间戳(也称为本地时间),然后用第二次回调替换它,该回调具有来自服务器的正确时间戳。此行为需要两次加载消息页以获得正确的时间戳,因为第一次只显示本地时间。我找到了一种只显示正确时间戳的方法。通过使用.ChildChanged,我可以忽略第一个时间戳,只检索第二个时间戳。然而,这回电话给了我未来的时间,正好提前一小时两分钟,我不知道如何解决这个问题。我已经在谷歌上搜索了好几天,但运气不好。请帮帮我。以下是我的代码:

要保存时间戳,请执行以下操作:

let timestamp = FirebaseServerValue.timestamp() let newData = ["sender":     "John", "timestamp": timestamp]
ref.childByAppendingPath("messages").childByAppendingPath(ref.authData.uid).setValue(newData)
    handle = ref.observeEventType(.ChildChanged, withBlock: { (snapshot) in

    let text = snapshot.value["message"] as! String

    let sender = snapshot.value["sender"] as! String

    let timestamp = snapshot.value["timestamp"] as! NSTimeInterval

    let date = NSDate(timeIntervalSince1970: timestamp/1000)

    // TESTING DATE
    let dateFormatter = NSDateFormatter()

    dateFormatter.AMSymbol = "AM"

    dateFormatter.PMSymbol = "PM"

    dateFormatter.dateFormat = "hh:mm, MM'/'dd'/'YY"

    let dateString = dateFormatter.stringFromDate(date)

    print(dateString)
在我的消息VC中,要检索时间戳:

let timestamp = FirebaseServerValue.timestamp() let newData = ["sender":     "John", "timestamp": timestamp]
ref.childByAppendingPath("messages").childByAppendingPath(ref.authData.uid).setValue(newData)
    handle = ref.observeEventType(.ChildChanged, withBlock: { (snapshot) in

    let text = snapshot.value["message"] as! String

    let sender = snapshot.value["sender"] as! String

    let timestamp = snapshot.value["timestamp"] as! NSTimeInterval

    let date = NSDate(timeIntervalSince1970: timestamp/1000)

    // TESTING DATE
    let dateFormatter = NSDateFormatter()

    dateFormatter.AMSymbol = "AM"

    dateFormatter.PMSymbol = "PM"

    dateFormatter.dateFormat = "hh:mm, MM'/'dd'/'YY"

    let dateString = dateFormatter.stringFromDate(date)

    print(dateString)
输出是

03:37, 02/14/16
但现在是:

02:35, 02/14/16

我只是运行了代码(好吧,减去
发送方
,因为您没有为其设置值),它打印了
5:55
(当地时间)。这对我来说很有效。您可能希望首先简单地打印从Firebase获得的
时间戳
。如果该值正确,则问题出在转换代码中。因此,我刚才用.timestamp()保存了它,并用.ChildChanged测试了它。时间比我早了5个小时。我在美国宾夕法尼亚州,时间是2014年2月2日下午7:00,但输出时间是2015年2月2日00:03。这是我的代码:ref.childByAppendingPath(“消息”).childByAppendingPath(“-KAUbSmAvUpqw2usUQAk”).childByAppendingPath(“-KAXEBrLRwu8Z15BLdk0”).observeEventType(.ChildChanged,withBlock:{snapshot in let timestamp=snapshot.value as!NSTimeInterval let date=NSDate(timeIntervalSince1970:timestamp/1000)print(date)})我错过了什么?你能告诉我你是如何得到输出的吗?等一下,我想那是UTC时间,但为什么服务器不给我本地时间?即使我试图用NSTimeZone.localTimeZone()将其转换为本地时间,仍然比当地时间提前一小时两分钟