【问题标题】:Get the correct Timestamp for chat app in android, firebase在 android、firebase 中获取聊天应用程序的正确时间戳
【发布时间】:2021-09-01 13:22:24
【问题描述】:

我想知道,即使系统中的时间不正确或与实际时间不同,我如何才能在 android 中根据用户的位置获得正确的时间(以毫秒为单位)。

我正在使用 Firebase 构建一个聊天应用程序,我需要为发送的每条消息提供一个时间戳并将其存储在 Firebase 中,以便我调用按时间戳顺序向用户显示消息。

我尝试了以下方法,但它不起作用,因为它只返回系统的相同时间而不是准确时间 -

DatabaseReference offsetRef = FirebaseDatabase.getInstance().getReference(".info/serverTimeOffset");

    offsetRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            Log.d(TAG, "onDataChange: Time snapshot: " + snapshot);
            long offset = snapshot.getValue(Long.class);
            long estimatedServerTimeMs = System.currentTimeMillis() + offset;
            }
        }

        @Override
        public void onCancelled(DatabaseError error) {
            System.err.println("Listener was cancelled");
        }
    });

【问题讨论】:

  • 问题不清楚,很难帮助。什么是“正确时间”?另外:这段代码有什么问题?所以:当你在每一行上设置一个断点,并在调试器中运行代码时:第一行没有做你期望它做的事情?那条线做了什么?而你的期望是什么?
  • 抱歉信息不完整。
  • 正确时间是指用户当前所在位置的实际时间。例如,如果用户的电话时间已设置为上午 10:00,但用户所在位置的实际时间为下午 1:00。基本上,我想在数据库中存储准确的时间戳,以便按顺序对聊天进行排序。当我将偏移量添加到 System.currentTimeMillis() 时,此代码只是返回系统的错误时间。我是 firebase 的初学者,在这里不太确定。
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: java android firebase firebase-realtime-database


【解决方案1】:

Firebase/Firestore 的所有时间戳都使用 UTC 时间戳,因此没有原生偏移量。相反,您必须从用户的设备捕获时区偏移并将其与消息或用户的公共配置文件一起存储,您可以使用以下方式从设备调用它:

return TimeZone.getDefault().getOffset(System.currentTimeMillis());

然后您可以将其添加到用户的消息时间戳中,这是因为默认情况下,时区是由您自己的操作系统在以人类可读格式读取时添加的。

【讨论】:

    猜你喜欢
    • 2014-10-19
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多