如何计算通过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 中的开始日期和结束日期的两个日期?