先上代碼
package com.chengxl.timecomparedemo;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import android.os.Bundle;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
private TextView tvStartTime, tvEndTime;
private Button btnStartTime, btnEndTime, submit,before;
public String from = "1970-01-01 08:00:00";
public String to = "2030-01-01 08:00:00";
private Date dateStart, dateEnd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvStartTime = (TextView) findViewById(R.id.tv_show_start_time);
tvEndTime = (TextView) findViewById(R.id.tv_show_end_time);
tvStartTime.setOnClickListener(this);
tvEndTime.setOnClickListener(this);
submit = (Button) findViewById(R.id.submit);
submit.setOnClickListener(this);
before = (Button) findViewById(R.id.before);
before.setOnClickListener(this);
btnStartTime = (Button) findViewById(R.id.btn_show_start_time_select);
btnEndTime = (Button) findViewById(R.id.btn_show_end_time_select);
btnStartTime.setOnClickListener(this);
btnEndTime.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v == tvStartTime || v == btnStartTime) {
showDatePickerDialog(0);
} else if (v == tvEndTime || v == btnEndTime) {
showDatePickerDialog(1);
} else if (v == submit) {
checkInput();
}else if(v == before){
Toast.makeText(MainActivity.this, twoDateDistance(dateStart,dateEnd),
Toast.LENGTH_SHORT).show();
}
}
private void showDatePickerDialog(int type) {
final Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
if (type == 0) { // start time
new DatePickerDialog(this, mStartDateSetListener, mYear, mMonth,
mDay).show();
} else if (type == 1) { // end time
new DatePickerDialog(this, mEndDateSetListener, mYear, mMonth, mDay)
.show();
}
}
private DatePickerDialog.OnDateSetListener mStartDateSetListener = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, monthOfYear, dayOfMonth, 0, 0, 0);
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String str = dateFormat.format(calendar.getTime()).toString();
from = str;
tvStartTime.setText(str.substring(0, 10));
}
};
private DatePickerDialog.OnDateSetListener mEndDateSetListener = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, monthOfYear, dayOfMonth, 23, 59, 59);
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String str = dateFormat.format(calendar.getTime()).toString();
to = str;
tvEndTime.setText(str.substring(0, 10));
}
};
public boolean checkInput() {
if (TextUtils.isEmpty(tvStartTime.getText())) {
Toast.makeText(MainActivity.this, "請輸入開始時間~", Toast.LENGTH_SHORT)
.show();
return false;
}
if (TextUtils.isEmpty(tvEndTime.getText())) {
Toast.makeText(MainActivity.this, "請輸入結束時間~", Toast.LENGTH_SHORT)
.show();
return false;
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
dateStart = dateFormat.parse(tvStartTime.getText().toString());
dateEnd = dateFormat.parse(tvEndTime.getText().toString());
if (dateStart.getTime() > dateEnd.getTime()) {
Toast.makeText(MainActivity.this, "開始時間需要小於結束時間哦~~",
Toast.LENGTH_SHORT).show();
return false;
} else if (dateStart.getTime() > new Date().getTime()) {
Toast.makeText(MainActivity.this, "開始時間大於現在時間哦~~",
Toast.LENGTH_SHORT).show();
return false;
} else if (dateEnd.getTime() > new Date().getTime()) {
Toast.makeText(MainActivity.this, "結束時間大於現在時間哦~~",
Toast.LENGTH_SHORT).show();
return false;
}
} catch (ParseException e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, "數據格式有誤!", Toast.LENGTH_SHORT)
.show();
return false;
}
return true;
}
public String twoDateDistance(Date startDate, Date endDate) {
if (startDate == null || endDate == null) {
return null;
}
long timeLong = endDate.getTime() - startDate.getTime();
if (timeLong < 60 * 1000)
return timeLong / 1000 + "秒前";
else if (timeLong < 60 * 60 * 1000) {
timeLong = timeLong / 1000 / 60;
return timeLong + "分鐘前";
} else if (timeLong < 60 * 60 * 24 * 1000) {
timeLong = timeLong / 60 / 60 / 1000;
return timeLong + "小時前";
} else if (timeLong < 60 * 60 * 24 * 1000 * 7) {
timeLong = timeLong / 1000 / 60 / 60 / 24;
return timeLong + "天前";
} else if (timeLong < 60 * 60 * 24 * 1000 * 7 * 4) {
timeLong = timeLong / 1000 / 60 / 60 / 24 / 7;
return timeLong + "周前";
} else {
return "就是現在";
}
}
}
以上涉及的內容有時間dialog的顯示,以及時間的字符串輸出,字符串的時間轉換,時間的比較,其中需要注意的一點就是如果只有年月日的時間,時分秒默認爲0,這樣如果你要跟今天的對比的話有時需要加或減一些東西,這個在具體應用中再具體修改吧。我再用到的時候因爲需要今天嘛,但是判斷的時候總說我的今天是過時的,然後我就在new Date()後面-1000*60*60*24,這樣的話時間就縮到明天了,跟今天的00:00:00比當然是小於的了。最後還寫了個方法是判斷前一個日期是後一個日期的多久以前的。方法都單獨寫出來的,我想這都是廣大卓友所希望的。另外最需要的圖片展示,放心,不會落下的。