本文中主要 讲解如何通过将两个时 间比较,得到相差的值,并转化为时间,并动态记录和现实,可用于记录会议开始时间等,也可对代码进行修改。
其中用了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 ,且比较时间为静态输入的, 如需要使用可改成传参数的方式。当前计时只支持获取的当前时间比比较时间晚的。如果需要倒序的话,可以改一下代码,问题应该不大,如果还有疑问或指教的话请留言,有时间我一定会回的。