我们在做项目开发的时候,常常会用到倒计时的功能,比如在做商品交易的系统,秒杀抢购的功能更需要用到倒计时的功能,下面我们直接上源码:
package com.example.daojishi;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
@SuppressLint("SimpleDateFormat")
public class MainActivity extends Activity
{
private TextView day;
private TextView hour;
private TextView minute;
private TextView seconds;
Timer timer = new Timer();
private static String endDate = "2030-03-25 10:10:10";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
day = (TextView) findViewById(R.id.index_miaosha_day);
hour = (TextView) findViewById(R.id.index_miaosha_hour);
minute = (TextView) findViewById(R.id.index_miaosha_min);
seconds = (TextView) findViewById(R.id.index_miaosha_seconds);
timer.schedule(task, 1000, 1000); // timeTask
}
/**
*
*
*/
public static String[] getDiff(String nowDate)
{
String[] diffStr = new String[] {"0", "0", "0", "0"};
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1 = null;
Date d2 = null;
try
{
d1 = format.parse(endDate);
d2 = format.parse(nowDate);
// 毫秒ms
long diff = d1.getTime() - d2.getTime();
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000);
diffStr = new String[] {diffDays + "", diffHours + "", diffMinutes + "", diffSeconds + ""};
System.out.println("diffStr:" + diffStr);
}
catch (Exception e)
{
e.printStackTrace();
}
return diffStr;
}
/**
* 用于获取系统的当前日期(具体到时分秒)
*/
public static String getSystemCurrentDateDetail()
{
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strCurrentDate = formater.format(new Date());
return strCurrentDate;
}
TimerTask task = new TimerTask()
{
@Override
public void run()
{
runOnUiThread(new Runnable()
{ // UI thread
@Override
public void run()
{
String nowDate = getSystemCurrentDateDetail();
System.out.println("nowDate:" + nowDate);
String[] diff = getDiff(nowDate);
day.setText(diff[0]);
hour.setText(diff[1]);
minute.setText(diff[2]);
seconds.setText(diff[3]);
for (int i = 0; i < diff.length; i++)
{
System.out.print("diff[" + i + "]" + diff[i]);
}
if (diff[0].equals("0") && diff[1].equals("0") && diff[2].equals("0") && diff[3].equals("0"))
{
timer.cancel();
//tv.setText("抢购活动已经结束");
}
}
});
}
};
}
主要用到了Timer类和TimerTask类。Timer相当于一个定时器,每隔一秒执行TimerTask任务,执行时间也为1秒,获取当前时间与到期时间的差值,显示在一个文本框上。
因为布局仅仅是一个TextView,所以这里不再给出。
运行的效果截图如下面所示。因为比较简单,这里不再给出源码。