Android Firebase TIMESTAMP

时间:2019-01-23 14:29:57

标签: java android firebase firebase-realtime-database

带有onClickListener的按钮,用于将时间戳添加到child(“ Date”)

users.child(user.getUid()).child("Date").setValue(ServerValue.TIMESTAMP);

它工作正常。

我的问题是,当我尝试在手机上的APP中进行检索时,我得到的是当前时间,而不是实际的TIMESTAMP时间。

 users.child(user.getUid()).child("Date").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                Date date=new Date();
                SimpleDateFormat sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss", Locale.getDefault());
                sfd.format(new Date());



                TimeSold.setText(String.valueOf(date));


            }

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

Firebase上的TIMESTAMP发生了变化,每个用户的TIMESTAMP应该不同。在我的应用程序上,它为所有用户提供了相同的当前时间。

我的Firebase

enter image description here

2 个答案:

答案 0 :(得分:0)

如果时间戳记另存为Long值,请输入:

Date date = new Date(dataSnapshot.getValue(Long.class));
SimpleDateFormat sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss", 
                                    Locale.getDefault());
String text = sfd.format(date);
TimeSold.setText(text);

onDataChange回调中

您的解决方案无法正常工作,因为您正在将当前日期传递给您写下的格式:

Date date = new Date()

默认情况下,它采用本地当前时间。

答案 1 :(得分:0)

  

我的问题是,当我尝试在手机上检索我的APP时,我得到的是当前时间,而不是实际的TIMESTAMP时间。

之所以发生这种情况,是因为在回调内部您实际上是在创建一个新的Date对象,而不是从数据库中获取它。要解决此问题,请使用以下方法:

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

下面几行代码从数据库中获取日期:

ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        long date = ds.getValue(Long.class);
        Log.d(TAG, getTimeDate(date));
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
users.child(user.getUid()).child("Date").addListenerForSingleValueEvent(valueEventListener);

编辑:

要使用格式化的日期,请使用以下方法:

public static String getTimeDate(long timestamp){
    try{
        Date netDate = (new Date(timestamp));
        SimpleDateFormat sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss", Locale.getDefault());
        return sfd.format(netDate);
    } catch(Exception e) {
        return "date";
    }
}