android - 最初使用 ServerValue.TIMESTAMP 和 Android 设置时如何从 Firebase 数据库检索本地 TIMESTAMP?

标签 android firebase firebase-realtime-database timestamp

我使用 ServerValue.TIMESTAMP 设置添加到 Android Firebase 数据库列表中的项目的数据和时间。我知道它最初被设置为 Map 并且当我们检索它时,我们将它检索为 Long 并且为了显示日期和时间,我使用了一种方法看起来像这样:

public static String getTimeDate(long timeStamp){
    try{
        DateFormat dateFormat = getDateTimeInstance();
        Date netDate = (new Date(timeStamp));
        return dateFormat.format(netDate);
    }
    catch(Exception e){
        return "date";
    }
}

因为我距离服务器7小时,显示日期和时间的时候,是7小时前。使用 ServerValue.TIMESTAMP 时如何显示正确的日期和时间。这有可能吗?

这是我显示时间和日期的方式:

ValueEventListener listener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
    Long timeStampLong = (Long) map.get("timeStamp");
    String timeStamp = getTimeDate(timeStampLong);
    arrayList.add(timeStamp);

    arrayAdapter = new ArrayAdapter<String>(getActivity(), R.layout.list, arrayList);
    listView.setAdapter(arrayAdapter);
}

@Override
public void onCancelled(DatabaseError databaseError) {}
};
ref.addListenerForSingleValueEvent(listener);

提前致谢!

最佳答案

此代码 fragment 将时间格式化为本地时区。您可以尝试以此为基础来满足您的需求。我不确定为什么您的代码不起作用。你能发布你正在使用的DateFormat吗?

    DatabaseReference timeRef = FirebaseDatabase.getInstance().getReference("time-test");

    timeRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                long time = dataSnapshot.getValue(Long.class);
                String s = DateFormat.getDateTimeInstance().format(new Date(time));
                Log.d(TAG, "onDataChange: " + s);
            } else {
                Log.d(TAG, "onDataChange: No data");
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            throw databaseError.toException();
        }
    });

    timeRef.setValue(ServerValue.TIMESTAMP);

关于android - 最初使用 ServerValue.TIMESTAMP 和 Android 设置时如何从 Firebase 数据库检索本地 TIMESTAMP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43141786/

相关文章:

android - 无法使用 Firebase 控制台发送数据消息

node.js - 将 Typescript 转换为 javascript 以实现 Firebase 功能

android - 将标记的标题与从 FirebaseDatabase 获取的字符串进行比较后,无法从标记数组以及 map 中删除标记

javascript - 如何在发出集合的客户端上防止 'value' 事件?

javascript - 谷歌地图 JS API Windows Phone Cordova

java - Activity 没效果

android - 为什么 BufferedInputStream.read() 在 Android Nougat 用于返回 0 时返回 -1?

android - 在 android 上创建一个可观察的发射器

firebase - 刷新以加载新数据并滚动以分页数据Flutter Firestore

android - 给定用户的 FirebaseUser.getUid() 是常量吗?