android - 如何使用 Firebase 服务器时间戳生成创建日期?

标签 android firebase timestamp firebase-realtime-database

目前,Google 版本的 ServerValue.TIMESTAMP 返回 {".sv":"timestamp"} 用作 Firebase 的指令以填充该字段将数据保存到 Firebase 服务器后的服务器时间戳。

但是,当您在客户端创建数据时,您还没有实际的时间戳(即用作创建日期)。您只有在初始保存和随后的检索之后才能访问时间戳,我想这有时为时已晚而且不是很优雅。


在谷歌之前:

更新:忽略此部分,因为它不正确 - 我误解了示例。 ServerValue.TIMESTAMP 始终返回 {".sv":"timestamp"}

据我所知,在 pre-google Firebase 中似乎有一个服务器生成的时间戳可用,允许您获取实际时间戳:

import com.firebase.client.ServerValue;
ServerValue.TIMESTAMP // eg. 1466094046

( ref 1 , ref 2 )


问题:

  1. 这种保存/检索是在我的模型实例上获取服务器生成的创建日期的唯一方法吗?
  2. 如果是,您能提出一种实现这种模式的方法吗?
  3. 我对 ServerValue.TIMESTAMP 的理解是否正确?随着 Google 收购 Firebase,它发生了变化? 更新:没有,@FrankvanPuffelen 回答说在获取过程中没有任何改变。

注意:

我不考虑在客户端使用 new Date(),因为我一直在阅读它不安全,但如果您有不同的看法,请分享您的想法。

最佳答案

当您在写操作中使用 ServerValue.TIMESTAMP 常量时,您是说 Firebase 数据库服务器在执行写操作时应该确定正确的时间戳。

假设我们运行这段代码:

ref.addValueEventListener(new ValueEventListener() {
    public void onDataChange(DataSnapshot dataSnapshot) {
        System.out.println(dataSnapshot.getValue()); 
    }

    public void onCancelled(DatabaseError databaseError) { }
});
ref.setValue(ServerValue.TIMESTAMP);

这将执行如下:

  1. 你附加一个监听器
  2. 你用 ServerValue.TIMESTAMP 写一个值
  3. Firebase 客户端立即触发一个值事件,该事件具有它将写入服务器的时间戳的近似值
  4. 您的代码打印该值
  5. 写操作被发送到 Firebase 服务器
  6. Firebase 服务器确定实际时间戳并将值写入数据库(假设没有安全规则失败)
  7. Firebase 服务器将实际时间戳发回给客户端
  8. Firebase 客户端为实际值引发一个值事件
  9. 您的代码打印该值

如果您使用 ChildEventListener 而不是 ValueEventListener,则客户端将在步骤 3 中调用 onChildAddedonChildChanged 在第 8 步中。

自 Firebase 加入 Google 以来,我们生成 ServerValue.TIMESTAMP 的方式没有任何变化。以前有效的代码将继续有效。这也意味着 first answer you linked是处理它的有效方法。

关于android - 如何使用 Firebase 服务器时间戳生成创建日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37929003/

相关文章:

firebase - 云防火墙 'Oops, collections failed to load!'

java - 在 Java 中将不完整的搜索字符串与日期格式匹配的最佳方法

SVN 提交旧日期/时间

android - 添加翻译时播放开发者控制台 "An unexpected error occurred. Please try again later."

android - Eclipse:不断获取 "ERROR: Application requires API version 15. Device API version is 14 (Android 4.0.2)."

android - Visual Studio cordova 工具 - 无法运行/调试/部署到 Android。亚行挂起

javascript - 将 firebaseDB 中的数据与云函数结合使用

ios - 当 Swift 中有嵌套函数时,如何将 bool 返回给外部函数?

java - 如何将时间戳转换为刻度 (PPQ) - 实时 Midi

java - 理解类<?>