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,然后将其发送到服务器。