如何计算通过Android中的日期选择器选择的两个日期之间的天数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何计算通过Android中的日期选择器选择的两个日期之间的天数相关的知识,希望对你有一定的参考价值。

我想计算从日期选择器中选择的日期之间的天数。我已经尽力了,但是找不到任何解决方案!请帮助我找到解决方案。这是当我们单击editText时显示日期选择器的代码。我到处搜索,但找不到任何合适的结果。

LeaveActivity.java

    public class LeaveActivity extends AppCompatActivity {

    private static EditText edt_tofrom;
    private static EditText edt_toDate;
    private TextView no_ofDays;

    private DatePickerDialog.OnDateSetListener edt_tofromlistener;
    private DatePickerDialog.OnDateSetListener edt_toDatelistener;


//    DatePickerDialogFragment mDatePickerDialogFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_leave);

        edt_tofrom = (EditText) findViewById(R.id.from_date);
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
//        edt_toform.setText( sdf.format(Calendar.getTime()));
        edt_toDate = (EditText) findViewById(R.id.to_date);
        no_ofDays = (TextView) findViewById(R.id.edt_noOfDays);
//        mDatePickerDialogFragment = new DatePickerDialogFragment();


//        edt_toform.setOnClickListener(this);
//        edt_toDate.setOnClickListener(this);

        edt_tofrom.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.N)
            @Override
            public void onClick(View v) {
                Calendar calendar = Calendar.getInstance();
                int year = calendar.get(Calendar.YEAR);
                int month = calendar.get(Calendar.MONTH);
                int day = calendar.get(Calendar.DAY_OF_MONTH);
                int day1 = calendar.get(Calendar.DAY_OF_YEAR);

                DatePickerDialog datePickerDialog = new DatePickerDialog(LeaveActivity.this,
                        edt_tofromlistener, year, month, day);

                datePickerDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.WHITE));
                datePickerDialog.show();
            }
        });

        edt_tofromlistener = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth){
                month = month + 1;
                Log.d("tag", "setDate: " + year + "/" + month + "/" + dayOfMonth + "");
                String date1 = +year + "/" + month + "/" + dayOfMonth + "";
                edt_tofrom.setText(date1);

            }
        };

        edt_toDate.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.N)
            @Override
            public void onClick(View v) {
                Calendar calendar = Calendar.getInstance();
                int year = calendar.get(Calendar.YEAR);
                int month = calendar.get(Calendar.MONTH);
                int day = calendar.get(Calendar.DAY_OF_MONTH);
                int day2 = calendar.get(Calendar.DAY_OF_YEAR);

                DatePickerDialog datePickerDialog = new DatePickerDialog(LeaveActivity.this,
                        edt_toDatelistener, year, month, day);

                datePickerDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.WHITE));
                datePickerDialog.show();


            }
        });

        edt_toDatelistener = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                month = month + 1;
                Log.d("tag", "setDate: " + year + "/" + month + "/" + dayOfMonth + "");

                String date2 = +year + "/" + month + "/" + dayOfMonth + "";
                edt_toDate.setText(date2);

            }

        };

    }


}

activity_leave.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp"

    tools:context=".activities.LeaveActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="APPLY FOR LEAVE"
            android:textSize="24sp"
            android:layout_gravity="center"
            android:textStyle="bold"
            android:background="@drawable/editt_text_background"/>

    </LinearLayout>


    <!-- TODO: Update blank fragment layout -->


    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:background="@drawable/editt_text_background">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:orientation="horizontal"
                android:layout_weight="1">

                <TextView
                    android:id="@+id/selectTxtView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="10dp"
                    android:layout_marginTop="10dp"
                    android:layout_marginEnd="10dp"
                    android:layout_marginBottom="10dp"
                    android:padding="10dp"
                    android:text="Select Leave Type"
                    android:textSize="15sp"
                    android:textStyle="bold"/>

                <Spinner
                    android:id="@+id/spinner"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="10dp"
                    android:layout_toEndOf="@id/selectTxtView"
                    android:background="@drawable/editt_text_background"
                    android:entries="@array/LeaveType"
                    android:padding="10dp" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:orientation="horizontal"
                android:padding="10dp"
                android:layout_weight="1">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="From Date:"
                    android:textColor="#000000"/>

                <EditText
                    android:id="@+id/from_date"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:ems="10"
                    android:layout_weight="1"
                    android:background="@drawable/editt_text_background"
                    android:clickable="true"
                    android:longClickable="false"
                    android:inputType="date"
                    android:layout_marginStart="36dp"
                    android:layout_marginEnd="20dp"
                    android:focusable="false"/>



                <!--            <DatePicker-->
                <!--                android:id="@+id/date_picker"-->
                <!--                android:layout_width="wrap_content"-->
                <!--                android:layout_height="wrap_content"-->
                <!--                android:calendarViewShown="false"-->
                <!--                android:datePickerMode="spinner"/>-->

            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:padding="10dp">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="5dp"
                    android:text="To Date:"
                    android:textColor="#000000"/>

                <EditText
                    android:id="@+id/to_date"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:ems="10"
                    android:background="@drawable/editt_text_background"
                    android:clickable="true"
                    android:longClickable="false"
                    android:inputType="date"
                    android:layout_marginStart="36dp"
                    android:layout_marginEnd="20dp"
                    android:focusable="false" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:padding="10dp"
                android:layout_weight="1">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="No.Of Days:"
                    android:textColor="#000"
                    android:padding="10dp"/>
                <TextView
                    android:id="@+id/edt_noOfDays"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:background="@drawable/editt_text_background"/>
            </LinearLayout>

      </ScrollView>

 </LinearLayout>
答案

使用以下功能来计算两个Date之间的天差,您也可以通过更改返回对象,将其用于计算时,分或秒的时差。

public static Long getDateDifferenceInDays(Date startDate, Date endDate) {

    Long different = endDate.getTime() - startDate.getTime();

    Long secondsInMilli = 1000L;
    Long minutesInMilli = secondsInMilli * 60;
    Long hoursInMilli = minutesInMilli * 60;
    Long daysInMilli = hoursInMilli * 24;

    Long elapsedDays = different / daysInMilli;
    different = different % daysInMilli;

    Long elapsedHours = different / hoursInMilli;
    different = different % hoursInMilli;

    Long elapsedMinutes = different / minutesInMilli;
    different = different % minutesInMilli;

    Long elapsedSeconds = different / secondsInMilli;

    System.out.printf("%d days, %d hours, %d minutes, %d seconds%n", elapsedDays, elapsedHours, elapsedMinutes, elapsedSeconds);

    return elapsedDays;
}

以上是关于如何计算通过Android中的日期选择器选择的两个日期之间的天数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ACF 日期选择器中限制 Wordpress 中的开始日期和结束日期的两个日期?

如何在不改变位置的情况下调整同一行中的两个 React 日期选择器

Android中的日期选择器日期选择[重复]

如何创建新的“圆形”日期选择器 android 对话框

Layui日期选择器+两个日期之间天数计算

如何使用两个日期选择器从我的数据库中获取数据。代码点火器