如何修复时间戳java+;火库问题?

如何修复时间戳java+;火库问题?,java,android,google-cloud-firestore,timestamp,Java,Android,Google Cloud Firestore,Timestamp,我正在创建一个基于firestore和java android的聊天应用程序 ,根据时间戳对聊天进行排序,具体取决于 但是排序每次都取决于设备时间,即使设备上的时间是错误的,这让我很失望,请帮助 我的上载时间戳代码: Timestamp dd= Timestamp.now(); long tt=dd.getSeconds(); hashMap.put("ServerTimes",tt); @Override public void onBindViewHolder(@

我正在创建一个基于firestore和java android的聊天应用程序 ,根据时间戳对聊天进行排序,具体取决于

但是排序每次都取决于设备时间,即使设备上的时间是错误的,这让我很失望,请帮助


我的上载时间戳代码:

Timestamp dd= Timestamp.now();
long tt=dd.getSeconds();
        hashMap.put("ServerTimes",tt);
@Override
    public void onBindViewHolder(@NonNull final MessageAdapter.ViewHolder holder, int position) {

Chat chat = mChat.get(position);
       long date = (long) chat.getServerTimes();

        Date date3 = new Date ();
        date3.setTime(date*1000);


        SimpleDateFormat format1 = new SimpleDateFormat("dd/MM/yyyy EEE");
        SimpleDateFormat format2 = new SimpleDateFormat("h:mm:s a");

        String dateDisplay1 = format1.format(date3);
        String dateDisplay2 = format2.format(date3);
String DateTime= dateDisplay1+" -- "+dateDisplay2;
我的下载时间戳代码:

Timestamp dd= Timestamp.now();
long tt=dd.getSeconds();
        hashMap.put("ServerTimes",tt);
@Override
    public void onBindViewHolder(@NonNull final MessageAdapter.ViewHolder holder, int position) {

Chat chat = mChat.get(position);
       long date = (long) chat.getServerTimes();

        Date date3 = new Date ();
        date3.setTime(date*1000);


        SimpleDateFormat format1 = new SimpleDateFormat("dd/MM/yyyy EEE");
        SimpleDateFormat format2 = new SimpleDateFormat("h:mm:s a");

        String dateDisplay1 = format1.format(date3);
        String dateDisplay2 = format2.format(date3);
String DateTime= dateDisplay1+" -- "+dateDisplay2;
我的排序代码:

  private void readMessages(final String myEmail, final String OtherUserEmail, final String imageUrl) {
            final List<Chat> mChat = new ArrayList<>();
    referenceContent.orderBy("ServerTimes", Query.Direction.ASCENDING) .addSnapshotListener(new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
................
private void readMessages(最终字符串myEmail、最终字符串OtherUserEmail、最终字符串imageUrl){
最终列表mChat=newarraylist();
referenceContent.orderBy(“ServerTimes”,Query.Direction.升序)。addSnapshotListener(新的EventListener(){
@凌驾
public void OneEvent(@Nullable QuerySnapshot queryDocumentSnapshots,@Nullable FirebaseFirestoreException e){
................

如果您不想依赖客户端时间戳,可以告诉Firestore。从该文档链接:

//使用来自服务器的值更新时间戳字段
映射更新=新的HashMap();
updates.put(“timestamp”,FieldValue.serverTimestamp());
docRef.update(updates).addOnCompleteListener(新的OnCompleteListener(){
...

如果您不想依赖客户端时间戳,可以告诉Firestore。从该文档链接:

//使用来自服务器的值更新时间戳字段
映射更新=新的HashMap();
updates.put(“timestamp”,FieldValue.serverTimestamp());
docRef.update(updates).addOnCompleteListener(新的OnCompleteListener(){
...

它在firestore 2019年7月21日凌晨12:37:54这样保存,因此我无法按此值对聊天进行排序。我共享的代码在数据库中保存了一个日期值。这些值可以按时间顺序排序,如有关数据类型的文档所示:。如果这对您不起作用,请创建一个新问题,在其中显示复制聊天记录的最小代码问题。这个问题(至少按照我的解释)主要是关于如何防止客户端日期(因为这些日期本质上是不可靠的),这就是我的答案。谢谢你,现在我终于成功地通过最后一步:referenceContent.orderBy(“timestampTest”,Query.Direction.ASCENDING)按时间戳排序聊天了它在firestore 2019年7月21日凌晨12:37:54这样保存,因此我无法按此值对聊天进行排序。我共享的代码在数据库中保存了一个日期值。这些值可以按时间顺序排序,如有关数据类型的文档所示:。如果这对您不起作用,请创建一个新问题,在其中显示复制聊天记录的最小代码问题。这个问题(至少按照我的解释)主要是关于如何防止客户端日期(因为这些日期本质上是不可靠的),这就是我的答案。谢谢你,现在我终于成功地通过最后一步:referenceContent.orderBy(“timestampTest”,Query.Direction.ASCENDING)按时间戳排序聊天了