很多初學者都在為如何實現日期計算這個算法而苦惱。現在網上也可以找到很多相關的java算法,可是如何在Android中實現這個功能呢? 其實很簡單。
我們先來看一下實現怎樣的一個效果!
我們需要輸入開始日期和結束日期來進行計算,最后進過算法實現輸出天數。
如圖:
首先,我們來實現一下界面布局。我們需要添加三個按鈕,即Button。還有三個文本框,即TextView。
下面我們來看一下具體代碼實現。
<?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:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.haojing.date.MainActivity" android:weightSum="1"> //添加第一個按鈕,來獲取開始時間。 <Button android:layout_width="352dp" android:layout_height="wrap_content" android:text="獲取開始時間" android:id="@+id/btnChoose1Date" android:layout_weight="0.05" /> //添加一個文本框來顯示開始時間。 <TextView android:id="@+id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="開始時間:" android:textSize="@dimen/activity_horizontal_margin" android:textStyle="italic" android:layout_weight="0.08" /> //添加第二個按鈕,獲取結束時間。 <Button android:layout_width="352dp" android:layout_height="wrap_content" android:text="獲取結束時間" android:id="@+id/btnChoose2Date" android:layout_weight="0.05" /> //第二個文本框,接收顯示結束時間。 <TextView android:id="@+id/text2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="結束時間:" android:textStyle="italic" android:textSize="@dimen/activity_horizontal_margin" android:layout_weight="0.08" /> //第三個按鈕,這個Button同前兩個功能不同,他是用來實現計算間隔天數。 <Button android:layout_width="352dp" android:layout_height="wrap_content" android:text="間隔天數" android:id="@+id/btnDaysAty" android:layout_weight="0.05" /> //顯示間隔天數。 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="日期間隔為:" android:textStyle="italic" android:layout_weight="0.08" android:textSize="@dimen/activity_horizontal_margin" android:id="@+id/days" /> </LinearLayout>
然后讓我們來看一下主程序。主程序我們使用DatePickerDialog來獲取時間。具體代碼實現:
//我們需要用到的包,寫代碼的過程中Android Studio會自動導入。 import android.app.DatePickerDialog; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.DatePicker; import android.widget.TextView; import com.example.haojing.date.Util.DateUtil;//計算天數程序包,寫計算天數代碼后導入即可。 import java.text.BreakIterator; import java.util.Date; public class MainActivity extends AppCompatActivity { public Button btnChoose1Date; public Button btnChoose2Date; Date date1; Date date2; String theDate1; String theDate2; long between; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 將獲取開始時間的按鈕傳進來 btnChoose1Date= (Button) findViewById(R.id.btnChoose1Date); // 在按鈕中實現獲取時間 btnChoose1Date.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new DatePickerDialog(MainActivity.this,new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { theDate1=(String.format("%d-%d-%d",year,monthOfYear+1,dayOfMonth)); System.out.println(theDate1); //btnChoose1Date.setText(theDate1); TextView text1=(TextView)findViewById(R.id.text1); text1.setText("開始時間:"+theDate1); date1 = new Date(year - 1900, monthOfYear+1, dayOfMonth);//獲取時間轉換為Date對象 } },2016,4,11).show(); } }); // 將獲取結束時間的按鈕傳進來 btnChoose2Date=(Button)findViewById(R.id.btnChoose2Date); // 在按鈕中實現獲取時間 btnChoose2Date.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new DatePickerDialog(MainActivity.this,new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { theDate2=(String.format("%d-%d-%d",year,monthOfYear+1,dayOfMonth)); System.out.println(theDate2); TextView text2=(TextView)findViewById(R.id.text2); text2.setText("結束時間:"+theDate2); date2= new Date(year - 1900, monthOfYear+1, dayOfMonth); //獲取時間轉換為Date對象 } },2016,4,11).show(); } }); // 將計算的天數傳遞給TextView findViewById(R.id.btnDaysAty).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { between= DateUtil.getDaysBetween(date1,date2); TextView days=(TextView) findViewById(R.id.days); days.setText("日期間隔為:"+between+"天"); } }); } }
最后我們來看一下天數的算法具體實現。當然,天數實現不是在整個程序最后一編寫的,而是在主程序轉入按鈕時編寫的。
package com.example.haojing.date.Util; import android.support.annotation.NonNull; import java.util.Calendar; /** * Created by haojing on 2016/4/11. */ public class DateUtil { @NonNull public static Long getDaysBetween(java.util.Date startDate, java.util.Date endDate) { Calendar fromCalendar = Calendar.getInstance(); fromCalendar.setTime(startDate); fromCalendar.set(Calendar.HOUR_OF_DAY, 0); fromCalendar.set(Calendar.MINUTE, 0); fromCalendar.set(Calendar.SECOND, 0); fromCalendar.set(Calendar.MILLISECOND, 0); Calendar toCalendar = Calendar.getInstance(); toCalendar.setTime(endDate); toCalendar.set(Calendar.HOUR_OF_DAY, 0); toCalendar.set(Calendar.MINUTE, 0); toCalendar.set(Calendar.SECOND, 0); toCalendar.set(Calendar.MILLISECOND, 0); //將獲取的日期轉換為天數。 return (toCalendar.getTime().getTime() - fromCalendar.getTime().getTime()) / (1000 * 60 * 60 * 24); } }
整個Android日期計算的實現到此結束。當然,日期計算的方法還有很多,並不局限與這一種方法。另外,獲取時間的方法也不止這一種。
本人初學者,有什么不對的地方,請大家指出。