java SimpleDataFormat从Firebase的负时间戳获取错误的日期
我只想按降序排列我的寄存器。我正在使用java SimpleDataFormat从Firebase的负时间戳获取错误的日期,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我只想按降序排列我的寄存器。我正在使用DatabaseReference中的方法orderByChild(): private void listPersons() { databaseReference.child("Persons").orderByChild("timeStamp").addValueEventListener(new ValueEventListener() { @Override
DatabaseReference
中的方法orderByChild()
:
private void listPersons() {
databaseReference.child("Persons").orderByChild("timeStamp").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
listPersonas.clear();
for (DataSnapshot objSnaptshot : dataSnapshot.getChildren()){
Persona p = objSnaptshot.getValue(Person.class);
listPersons.add(p);
}
....
});
}
以下是我的人员,没有负时间戳:
firebase数据库中的人员:
2019/05/31 03:13:22 timestamp: ->1559333602000
2020/09/10 02:50:52 timestamp: ->1599767452000
2020/10/31 02:15:34 timestamp: ->1604171734423
在添加负符号之前没有问题,但是当我将负符号用于orderByChild()
时,此方法的日期是错误的:
public String timeStampToDate(Object timestamp){
String date = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss").format(timestamp);
return date;
}
我得到:
2019/05/31 03:13:22 timestamp: -> -1559333602000
2020/09/10 02:50:52 timestamp: -> -1599767452000
2020/10/31 02:15:34 timestamp: -> -1604171734423
1919/03/02 11:44:25
1919/04/22 11:09:08
1920/08/02 10:46:38
我不知道为什么我的日期是错误的,我只是把负符号的目的是让我的寄存器降序。方法公共字符串timeStampToDate
在我的模型类Person
中,我正在列表视图适配器中使用此方法:
regdate.setText(personModel.timeStampToDate(personModel.getTimeStamp()));
通过这种方式,我注册了我的个人:
Person p = new Person();
p.setIdperson(UUID.randomUUID().toString());
p.setName(name);
p.setPhone(phone);
p.setTimeStamp(ServerValue.TIMESTAMP);
databaseReference.child("Persons").child(p.getIdperson()).setValue(p);
正如我们所看到的,我正在使用ServerValue.TIMESTAMP
获取firebase时间戳。现在我应该注册时间戳乘以-1。好。我希望我清楚我的问题。
提前谢谢
更新:2020年10月31日我的解决方案显示正常日期:
我的解决方案是将时间戳
乘以-1
,这样我就得到了正常的时间戳,从而得到了正常的日期:
public String timeStampToDate(Object timestamp){
long value = Long.valueOf(String.valueOf(timestamp));
long normaldate = value * -1;
String date = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss").format(normaldate);
return date;
}
现在我正试图向firebase数据库发送一个负时间戳
。我读到我应该使用一个“云函数”将时间戳自动转换为负数,但我不知道怎么做。
提前谢谢。我已经把你的问题看了三遍,但是我没能回答你的问题。我基本上解决了我的问题,因为我给SimpleDateFormat
发送了一个否定的时间戳,它得到了一个错误的日期。现在我想向firebase数据库发送一个负时间戳
,以使每个人的时间戳保持为负。我不知道该怎么做。先生,请帮帮我。我这样做了:“-”+ServerValue.TIMESTAMP
但是我得到了这个错误:java.lang.NumberFormatException:对于输入字符串:“-{.sv=TIMESTAMP}”
。谢谢,先生。有人告诉我,在客户id中获取+ServerValue.TIMESTAMP不是件好事。我解决了从java日历中获取当前日期的问题,单位为毫秒,然后乘以-1,然后将其发送到服务器。我检查了你的问题三次,但没有得到你的问题。我基本上在我向SimpleDateFormat
发送了一个负时间戳,它得到了一个错误的日期。现在我想向firebase数据库发送一个负时间戳
,以使每个人的时间戳保持为负。我不知道该怎么做。先生,请帮帮我。我这样做了:“-”+ServerValue.TIMESTAMP
但是我得到了这个错误:java.lang.NumberFormatException:对于输入字符串:“-{.sv=TIMESTAMP}”
。谢谢,先生。有人告诉我,在客户id中获取+ServerValue.TIMESTAMP不是一件好事。我解决了从java日历中获取当前日期的问题,以毫秒为单位,然后乘以-1,然后将其发送到服务器。