android中的時間比較大小以及字符串轉換爲時間

先上代碼

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比當然是小於的了。最後還寫了個方法是判斷前一個日期是後一個日期的多久以前的。方法都單獨寫出來的,我想這都是廣大卓友所希望的。另外最需要的圖片展示,放心,不會落下的。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章