java - 在另外两个textview获取值之后设置textview值

标签 java android date days period

我创建了一个预订酒店应用程序,它有 3 个 TextView 和 2 个用于选择日期的按钮。如果按钮单击它会显示一个日期,所选日期将显示到 2 个 TextView 。如何在第三个 TextView 中显示日期之间的日期? 这是我的代码(第三个 TextView 不显示为日期之间的日期)

protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);


            dateFormatter = new SimpleDateFormat("dd-MM-yyyy", Locale.US);

            tvDateResult = (TextView) findViewById(R.id.tv_dateresult);
            res = findViewById(R.id.tv_dateresult1);
            ress = findViewById(R.id.tv_dateresult2);
            btDatePicker = (Button) findViewById(R.id.bt_datepicker);
            date = findViewById(R.id.bt_datepicker1);
            get = findViewById(R.id.getprice);

            date.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    showDateDialog2();
                }

            });

            btDatePicker.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    showDateDialog();
                }

            });




                }




            private void showDateDialog2() {

                Calendar newCalendar = Calendar.getInstance();


                datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {

                    @Override
                    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

                        Calendar newDate = Calendar.getInstance();
                        newDate.set(year, monthOfYear, dayOfMonth);

                        res.setText(dateFormatter.format(newDate.getTime()));
                    }

                },newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));

                datePickerDialog.show();

                if(tvDateResult !=null || res !=null) {
                    try {
                        String a = tvDateResult.getText().toString();
                        String b = res.getText().toString();

                        Date aa = dateFormatter.parse(a);
                        Date bb = dateFormatter.parse(b);

                        long diff = bb.getTime() - aa.getTime() / 24 * 60 * 60 * 1000;


                        ress.setText((int) TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));


                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                }
             }

        private void showDateDialog(){


            Calendar newCalendar = Calendar.getInstance();


            datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {

                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

                    Calendar newDate = Calendar.getInstance();
                    newDate.set(year, monthOfYear, dayOfMonth);

                    tvDateResult.setText(dateFormatter.format(newDate.getTime()));
                }

            },newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));

            datePickerDialog.show();
}

最佳答案

  1. 声明 2 个全局变量:

    日历 date1 = null,date2 = null;

  2. 在两个日期选择器的 onDateSet 方法中,将所选日期保存在全局变量中。

在第一个日期选择器的 onDateSet 中,

Calendar newDate = Calendar.getInstance();
date1 = newDate
updateTextView()

类似地,在第二个日期选择器的 onDateSet 中,

Calendar newDate = Calendar.getInstance();
date1 = newDate
updateTextView()
  • 从两个 onDateSet 方法调用一个方法。

    private void updateTextView() {
        if(date1 != null && date2 != null) {
            tvDateResult .setText(dateFormatter.format(daysBetween(date1,date2)));
        }
    }
    
    public static long daysBetween(Calendar startDate, Calendar endDate) {
    
        // Make sure we don't change the parameter passed
        Calendar newStart = Calendar.getInstance();
        newStart.setTimeInMillis(startDate.getTimeInMillis());
        newStart.set(Calendar.HOUR_OF_DAY, 0);
        newStart.set(Calendar.MINUTE, 0);
        newStart.set(Calendar.SECOND, 0);
        newStart.set(Calendar.MILLISECOND, 0);
    
        Calendar newEnd = Calendar.getInstance();
        newEnd.setTimeInMillis(endDate.getTimeInMillis());
        newEnd.set(Calendar.HOUR_OF_DAY, 0);
        newEnd.set(Calendar.MINUTE, 0);
        newEnd.set(Calendar.SECOND, 0);
        newEnd.set(Calendar.MILLISECOND, 0);
    
        long end = newEnd.getTimeInMillis();
        long start = newStart.getTimeInMillis();
        return TimeUnit.MILLISECONDS.toDays(Math.abs(end - start));
    }
    
  • 引用:How to get number of days between two calendar instance?

    关于java - 在另外两个textview获取值之后设置textview值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62436420/

    相关文章:

    java - onClick fragment 找不到方法

    android - 显示一个月中的所有天数

    java - 如何防止数组的值改变

    Java 二叉树。打印 InOrder 遍历

    java - 将 HTML5 日历更改为 JQuery clendar 后,日期 HTML 字段不再保存到数据库中

    java - 查找3个日期中最早的日期

    javascript - 使用 JavaScript 将秒转换为 HH-MM?

    java - java客户端可以知道服务器是否请求证书吗?

    java - 执行 doInBackground() 时发生错误 Android AsyncTask 错误

    android - 开启第二个 Activity 失败