ошибка в получении предыдущего года от текущего года - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь получить предыдущий год от текущего года.

 private void lastyear() {
            pd = new ProgressDialog(getActivity());
            pd.setTitle("Please Wait...");
            pd.setCancelable(false);
            pd.show();

            Date lastyear = new Date();
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(lastyear.getTime());
            calendar.add(Calendar.YEAR, -1);

            lastyear = new Date(calendar.get(Calendar.YEAR));
            Log.e("lastyear", String.valueOf(lastyear));


            db.collection("Orderers").document(user_id).collection("OpenOrders")
                    .whereEqualTo("OrderPlacedDateTime", lastyear)
                    .orderBy("OrderPlacedDateTime", Query.Direction.DESCENDING)
                    .get()
                    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<QuerySnapshot> task) {
                            if (task.isSuccessful()) {

                                ls_data.clear();

                                for (DocumentSnapshot document : task.getResult()) {

                                    if (document.exists()) {

                                        final String DeliveryMethod = (String) document.get("DeliveryMethods");
                                        final String ProductName = (String) document.get("ProductName");
                                        final Object Price1 = document.get("ProductPrice");
                                        final String Price = String.valueOf(Price1);
                                        final Object FinalPrice1 = document.get("FinalPrice");
                                        final String FinalPrice = String.valueOf(FinalPrice1);
                                        final String date = String.valueOf(document.get("OrderPlacedDateTime"));
                                        final String Orderid = (String) document.get("OrderId");
                                        final String image3 = (String) document.get("ProductImage");

                                        Model m = new Model();

                                        m.setName(ProductName);
                                        m.setPrice(Price);
                                        m.setDate(String.valueOf(date));
                                        m.setOrderid(Orderid);
                                        m.setimage3(image3);
                                        m.setFinalPrice(FinalPrice);
                                        m.setDeliveryMethods(DeliveryMethod);

                                        ls_data.add(m);

                                    }

                                }

                                try {
                                    adapter = new CustomAdapterOrders(getActivity(), ls_data, getActivity());
                                } catch (Exception ex) {
                                    Log.e("Error", "Dashboard : " + ex);
                                }

                                listView.setAdapter(adapter);
                                adapter.notifyDataSetChanged();
                                swipeLayout.setRefreshing(false);
                                listView.setVisibility(View.VISIBLE);
                                pd.dismiss();

                            }else{
                                pd.dismiss();
                                Toast.makeText(getActivity(), "No open orders yet", Toast.LENGTH_SHORT).show();
                                //listView.setAdapter(adapter);
                                listView.setVisibility(View.GONE);
                                //adapter.notifyDataSetChanged();
                                swipeLayout.setRefreshing(false);
                            }

                        }
                    });
        }

Он должен вернуть мне 2017 год в качестве результата. Но он возвращает неправильный вывод следующим образом

a E / Фильтровать по :: Последний год 05-21 10: 43: 44.676 11437-11437/com.bodaty.samyata.samyata E / lastyear: Чт 01 января 00:00:02 GMT + 00: 00 1970

Все заказы, представленные в 2017 году, должны отображаться. Спасибо invvance

Ответы [ 4 ]

0 голосов
/ 21 мая 2018
   Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.YEAR,-1);
    String year = new SimpleDateFormat("yyyy", Locale.US).format(calendar.getTime());
    Toast.makeText(this, ""+ year, Toast.LENGTH_SHORT).show();

Попробуйте это

0 голосов
/ 21 мая 2018

Пожалуйста, измените следующий код:

Date lastyear = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(lastyear.getTime());
calendar.add(Calendar.YEAR, -1);

lastyear = new Date(calendar.get(Calendar.YEAR));
Log.e("lastyear", String.valueOf(lastyear));

на:

 Calendar now= Calendar.getInstance();// this has all the current time info including year
    now.add(Calendar.YEAR, -1); //now is 1 year less.

    Date lastyear= now.getTime();
    Log.e("lastyear", String.valueOf(lastyear));
0 голосов
/ 21 мая 2018

Вот ответ.Просто нужно поменять одну строку

 private void lastyear() {
        pd = new ProgressDialog(getActivity());
        pd.setTitle("Please Wait...");
        pd.setCancelable(false);
        pd.show();

//        Date lastyear = new Date();
//        Calendar calendar = Calendar.getInstance();
//        calendar.setTimeInMillis(lastyear.getTime());
//        calendar.add(Calendar.YEAR, -1);
//
//        lastyear = new Date(calendar.get(Calendar.YEAR));

        Date lastyear = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(lastyear.getTime());
        calendar.add(Calendar.YEAR ,-1);
        lastyear = new Date(calendar.getTime().getTime());
        Log.e("lastyear", String.valueOf(lastyear));


        db.collection("Orderers").document(user_id).collection("OpenOrders")
                .whereEqualTo("OrderPlacedDateTime", lastyear)
                .orderBy("OrderPlacedDateTime", Query.Direction.DESCENDING)
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {

                            ls_data.clear();

                            for (DocumentSnapshot document : task.getResult()) {

                                if (document.exists()) {

                                    final String DeliveryMethod = (String) document.get("DeliveryMethods");
                                    final String ProductName = (String) document.get("ProductName");
                                    final Object Price1 = document.get("ProductPrice");
                                    final String Price = String.valueOf(Price1);
                                    final Object FinalPrice1 = document.get("FinalPrice");
                                    final String FinalPrice = String.valueOf(FinalPrice1);
                                    final String date = String.valueOf(document.get("OrderPlacedDateTime"));
                                    final String Orderid = (String) document.get("OrderId");
                                    final String image3 = (String) document.get("ProductImage");

                                    Model m = new Model();

                                    m.setName(ProductName);
                                    m.setPrice(Price);
                                    m.setDate(String.valueOf(date));
                                    m.setOrderid(Orderid);
                                    m.setimage3(image3);
                                    m.setFinalPrice(FinalPrice);
                                    m.setDeliveryMethods(DeliveryMethod);

                                    ls_data.add(m);

                                }

                            }

                            try {
                                adapter = new CustomAdapterOrders(getActivity(), ls_data, getActivity());
                            } catch (Exception ex) {
                                Log.e("Error", "Dashboard : " + ex);
                            }

                            listView.setAdapter(adapter);
                            adapter.notifyDataSetChanged();
                            swipeLayout.setRefreshing(false);
                            listView.setVisibility(View.VISIBLE);
                            pd.dismiss();

                        }else{
                            pd.dismiss();
                            Toast.makeText(getActivity(), "No open orders yet", Toast.LENGTH_SHORT).show();
                            //listView.setAdapter(adapter);
                            listView.setVisibility(View.GONE);
                            //adapter.notifyDataSetChanged();
                            swipeLayout.setRefreshing(false);
                        }

                    }
                });
0 голосов
/ 21 мая 2018

Это начальная проблема:

lastyear = new Date(calendar.get(Calendar.YEAR));

Это создает Date объект с "временем в миллисекундах с начала эпохи Unix", равным году calendar.То есть вы создаете Date, что составляет 2017 миллисекунд после эпохи Unix: 1970-01-01T00: 00: 02.017Z, другими словами.Это объясняет ваше сообщение в журнале.

Если вы можете возможно избегать классов java.util.Date и java.util.Calendar, то это хорошая идея (вместо java.time) ...но если у вас есть для их использования, вы хотите

lastyear = calendar.getTime();

Это способ получить Date объект, соответствующий Calendar объекту.

Однако, тогда вы все еще используете его в запросе, как это:

.whereEqualTo("OrderPlacedDateTime", lastyear)

Это будет искать документ с такой точной отметкой времени, что, вероятно, не то, что вы хотите.Если вы хотите получить все заказы в этом году, вы, вероятно, хотите найти год (например, 2017), затем создайте два значения Date, одно из которых представляет начало 2017 года, а другое - начало 2018 года, и используйте:

.whereGreaterThanOrEqualTo("OrderPlacedDateTime", startInclusive)
.whereLessThan("OrderPlacedDateTime", endExclusive)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...