简体   繁体   English

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

[英]How to calculate the number of days between two dates selected through date Picker in android

I want to calculate the number of days between the dates selected from date picker.我想计算从日期选择器中选择的日期之间的天数。 Ive tried enough but couldn't find any solution.我已经尝试了足够多,但找不到任何解决方案。 Please help me find the solution.请帮我找到解决方案。 This is the code for displaying datepicker when we click the editText.这是当我们单击editText 时显示日期选择器的代码。 I have searched everywhere but couldn't find any proper results.我到处搜索,但找不到任何合适的结果。

LeaveActivity.java 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 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>

Use following function to count diference of days between two Date , you can also use same for calculating difrence of Hours, Minutes or Seconds by just change the return object.使用以下 function 计算两个Date之间的天数差异,您也可以通过更改返回 object 来计算小时、分钟或秒的差异。

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;
}

Never use Calendar .永远不要使用Calendar It was years ago supplanted by the modern java.time classes defined in JSR 310.它在几年前被 JSR 310 中定义的现代java.time类所取代。

For date values without time of day and without time zone, use LocalDate .对于没有时间和时区的日期值,请使用LocalDate

I do not know Android.我不知道Android。 But you seem to be getting the year, month, and day as integers from your picker.但是你似乎从你的选择器中得到了年、月和日的整数。 Make LocalDate objects of those.制作这些的LocalDate对象。

LocalDate localDate = LocalDate.of( y , m , d ) ;

Calculate elapsed days.计算经过的天数。

long days = ChronoUnit.DAYS.between( start , end ) ;

About java.time关于java.time

The java.time framework is built into Java 8 and later. java.time框架内置于 Java 8 及更高版本中。 These classes supplant the troublesome old legacy date-time classes such as java.util.Date , Calendar , & SimpleDateFormat .这些类取代了麻烦的日期时间类,例如java.util.DateCalendarSimpleDateFormat

To learn more, see the Oracle Tutorial .要了解更多信息,请参阅Oracle 教程 And search Stack Overflow for many examples and explanations.并在 Stack Overflow 上搜索许多示例和解释。 Specification is JSR 310 .规范是JSR 310

The Joda-Time project, now in maintenance mode , advises migration to the java.time classes.现在处于维护模式Joda-Time项目建议迁移到java.time类。

You may exchange java.time objects directly with your database.您可以直接与数据库交换java.time对象。 Use a JDBC driver compliant with JDBC 4.2 or later.使用符合JDBC 4.2或更高版本的JDBC 驱动程序 No need for strings, no need for java.sql.* classes.不需要字符串,不需要java.sql.*类。 Hibernate 5 & JPA 2.2 support java.time . Hibernate 5 & JPA 2.2 支持java.time

Where to obtain the java.time classes?从哪里获得 java.time 课程?

哪个 java.time 库与哪个版本的 Java 或 Android 一起使用的表

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM