android 计时(可用于会议计时) handler

本文中主要 讲解如何通过将两个时 间比较,得到相差的值,并转化为时间,并动态记录和现实,可用于记录会议开始时间等,也可对代码进行修改。

其中用了handler 和message 消息的传输,当然 如果仅仅用于计时的话 也可以使用Timer  看个人的需求了,代码已经测试过了,将放在文章的下方,有需要了解的同学可以参考下,代码本身还是存在一定的可改进性。

Activtiy


package com.time.activity;

import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

public class TimeActivity extends Activity implements OnClickListener {

	private TextView tv_showTime = null;//用于输出计时
	private int day,hour,minute,second;

	private final int COUNT_TIME = 10;
	private Thread t = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		this.tv_showTime = (TextView) this.findViewById(R.id.tv_show_time);
		this.tv_showTime.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.tv_show_time:
			CountTime();
			tv_showTime.setText(day+"天"+hour+"小时"+minute+"分"+second+"秒");
			changeTheTimeCount();
			break;

		default:
			break;
		}
	}

	/**
	 * 该方法负责得到当前时间,并与给定时间比对,算出的时间差
	 */
	void CountTime(){
		Date date_Now = new Date();//获得现在的时间
		date_Now.setYear(date_Now.getYear());
		System.out.println(date_Now.getYear());
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy:MM:DD:HH:mm:ss");
		String []splitTime = simpleDateFormat.format(date_Now).split(":");
		Date date_NowNew = new Date(Integer.parseInt(splitTime[0]),Integer.parseInt(splitTime[1]),
				Integer.parseInt(splitTime[2]),Integer.parseInt(splitTime[3]),Integer.parseInt(splitTime[4]),Integer.parseInt(splitTime[5]));
		long second_Now = date_NowNew.getTime();//获得时间的毫秒数,返回的是自1970年1月1日00:00:00到此对象的毫秒数
		Date date_Pass = new Date(2009,12,12,12,54,53);//根据具体时间创建一个date  具体使用中应该以参数的方式传入更为合理
		long second_Pass = date_Pass.getTime();//获得时间的毫秒数,返回的是自1970年1月1日00:00:00到此对象的毫秒数
		long distance = (second_Now - second_Pass)/1000; //计算时间差 并转化成秒
		/**
		 * 将秒计算出成天时分秒
		 */
		this.day = (int) (distance/86400);
		this.hour = (int) ((distance%86400)/3600);
		this.minute = (int) ((distance%86400)%3600)/60;
		this.second = (int) ((distance%86400)%3600)%60;
	}
	/**
	 * 动态计时
	 */
	private void  changeTheTimeCount(){
		t =new Thread(new Runnable() {
			@Override
			public void run() {
				// TODO Auto-generated method stub
				while (true) {
					second++;
					if(second >=60){
						second =0;
						minute++;
					}
					if(minute >=60){
						minute = 0;
						hour++;
					}
					if(hour >=24){
						hour = 0;
						day++;
					}
					String distanceTime = day+"天"+hour+"小时"+minute+"分"+second+"秒";
					Message msg = new Message();
					msg.obj = distanceTime;//将计算出的新的时间距离传个handler 处理
					msg.what = COUNT_TIME;
					handler.sendMessage(msg);
					try {
						Thread.sleep(1000);//每隔一秒计时一次
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		});
		t.start();
	}
	Handler handler = new Handler(){
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case COUNT_TIME:
				tv_showTime.setText(String.valueOf(msg.obj));
				break;
			default:
				break;
			}
		};
	};


}

另外xml的布局文件就不上传了,就只有一个TextView  ,且比较时间为静态输入的, 如需要使用可改成传参数的方式。当前计时只支持获取的当前时间比比较时间晚的。如果需要倒序的话,可以改一下代码,问题应该不大,如果还有疑问或指教的话请留言,有时间我一定会回的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值