带有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
答案 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";
}
}