[英]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 ) ;
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.Date
、 Calendar
和SimpleDateFormat
。
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 课程?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.