【问题标题】:Convert ServerValue.TIMESTAMP To date将 ServerValue.TIMESTAMP 转换为日期
【发布时间】:2018-01-26 09:17:05
【问题描述】:

我已经放了一个按钮来保存当前的日期和时间到我的 Firebase 数据库。

private void saveTime() {
        DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
        rootRef.child(Uid).child("time").setValue(ServerValue.TIMESTAMP);
    }

我正在尝试将服务器日期与我保存在数据库中的日期进行比较。所以请帮我比较一下。

 private void Compare() {

        DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
        DatabaseReference ezzeearnRef = rootRef.child(Uid).child("time");
        ValueEventListener eventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {
                    Long time = dataSnapshot.getValue(Long.class);
                    assert time != null;
                    Date oldDate = new Date(time);
                    GregorianCalendar oldCalendar = new GregorianCalendar();
                    oldCalendar.setTime(oldDate);
                        GregorianCalendar newCalendar = new GregorianCalendar();


                Map<String, String> now = ServerValue.TIMESTAMP;
                newCalendar.setTime((Date) now);

                    if (newCalendar.get(Calendar.DATE) != oldCalendar.get(Calendar.DATE) ||
                            newCalendar.get(Calendar.MONTH) != oldCalendar.get(Calendar.MONTH) ||
                            newCalendar.get(Calendar.YEAR) != oldCalendar.get(Calendar.YEAR)

                            ) {
                        // new day starts toast
                    }


                }else{
                    // toast
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        };
        ezzeearnRef.addValueEventListener(eventListener);

    }

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    ServerValue.TIMESTAMP 并不是真正的时间戳,它是 Map,所以你不能像这样将它转换为日期

    Map<String, String> now = ServerValue.TIMESTAMP;
    newCalendar.setTime((Date) now);
    

    时间戳值将从服务器存储

    【讨论】:

      【解决方案2】:

      您正在从数据库中正确检索时间戳。要将该时间戳(即服务器时间戳)与实际时间进行比较,您可以使用以下代码行与当前时间进行比较:

      Long currentTimeMillis = System.currentTimeMillis();
      

      然后你可以使用一个简单的 if 语句:

      if(time < currentTimeMillis) {
          //Do something
      } else {
          //Do something else
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-12
        • 2016-04-03
        • 2010-12-18
        • 2014-07-01
        • 2011-11-06
        • 2021-06-07
        相关资源
        最近更新 更多