显示当前日期(实时)

System.currentTimeMillis()可以获取系统当前的时间,这里要实时显示就可以开启一个线程,然后通过handler发消息,来实时的更新TextView上显示的系统时间。具体就是写一个线程,线程里面无限循环,每隔一秒发送一个消息,在主线程里面处理消息并更新时间。

   class TimeThread extends Thread {
        @Override
        public void run() {
            do {
                try {
                    Thread.sleep(1000);
                    Message msg = new Message();
                    msg.what = 1;  //消息(一个整型值)
                    mHandler.sendMessage(msg);// 每隔1秒发送一个msg给mHandler
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            } while (true);
        }
    }
 
    //在主线程里面处理消息并更新UI界面
    private Handler mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 1:
                    //long sysTime = System.currentTimeMillis();//获取系统时间
                    //CharSequence sysTimeStr = DateFormat.format("hh:mm:ss", sysTime);//时间显示格式
                   // time.setText(sysTimeStr); //更新时间

      SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      String dateStr = dateformat.format(System.currentTimeMillis());
      textView.setText(dateStr);

                    break;
                default:
                    break;
 
            }
        }
    };

 

然后在需要时启动线程就好,如下:

 protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      requestWindowFeature(Window.FEATURE_NO_TITLE);//去除标题栏
      setContentView(R.layout.activity_main);
      new TimeThread().start(); //启动新的线程
 }

————————————————————

参考:https://blog.csdn.net/xch_yang/article/details/80590911

 

 

反过来,如果给我们一个“ 2019-03-31 22:40:00 ”字符串,得到当前日期对应的毫秒值

SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
    long time = dateformat.parse("2019-03-31 22:40:00").getTime();
    System.out.println(time);
} catch (ParseException e) {
    e.printStackTrace();
}

输出结果:I/System.out: 1554043200000

 

获取当前毫秒值

long nowDate = System.currentTimeMillis(); //结束时间
System.out.println(nowDate);

 输出结果:  I/System.out:   1585502810765

 

 

所以说,

这两种都可以获取当前时间的毫秒数,只是

一个是直接计算

long nowDate = System.currentTimeMillis(); //结束时间
System.out.println(nowDate);

一个是手动输入时间

try {
long time = dateformat.parse("2020-03-30 08:48:17").getTime();
System.out.println(time);
} catch (ParseException e) {
e.printStackTrace();
}



结果: I/System.out: 1585529297000
I/System.out: 1585529270262



计算现在距离过去某时间的天数和时间

    SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// String dateStr = dateformat.format(System.currentTimeMillis());
// textView.setText(dateStr);


long nd = 24 * 60 * 60;
long nh = 60 * 60;
long nm = 60;

// long endDate = 1554043200000L;
try {
long endDate = dateformat.parse("2019-03-31 22:40:00").getTime();
long nowDate = System.currentTimeMillis(); //结束时间
// long ns = 1000;
// 获得两个时间的秒时间差异
long diff = (nowDate/1000L) - (endDate/1000L);
// 计算差多少天
long day = diff / nd;
// 计算差多少小时
long hour = diff % nd / nh;
// 计算差多少分钟
long min = diff % nd % nh / nm;
// 计算差多少秒//输出结果
long sec = diff % nd % nh % nm;
String res = "";
if(day != 0){
res += day + "";
}
if(hour != 0){
res += " "+hour + ":"+min + ":"+sec;
}
System.out.println(res);

} catch (ParseException e) {
e.printStackTrace();
}


运行结果:I/System.out: 364天  10:39:17


实时显示某日到现在的距离

class TimeThread extends Thread {
@Override
public void run() {
do {
try {
Thread.sleep(1000);
Message msg = new Message();
msg.what = 1; //消息(一个整型值)
mHandler.sendMessage(msg);// 每隔1秒发送一个msgmHandler
} catch (InterruptedException e) {
e.printStackTrace();
}
} while (true);
}
}

//在主线程里面处理消息并更新UI界面
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
long nd = 24 * 60 * 60;
long nh = 60 * 60;
long nm = 60;
// long endDate = 1554043200000L;
try {
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long endDate = dateformat.parse("2019-03-31 22:40:00").getTime();
long nowDate = System.currentTimeMillis(); //结束时间
// long ns = 1000;
// 获得两个时间的秒时间差异
long diff = (nowDate/1000L) - (endDate/1000L);
// 计算差多少天
long day = diff / nd;
// 计算差多少小时
long hour = diff % nd / nh;
long hour1 = hour/10;
long hour2 = hour%10;
// 计算差多少分钟
long min = diff % nd % nh / nm;
long min1 = min/10;
long min2 = min%10;
// 计算差多少秒//输出结果
long sec = diff % nd % nh % nm;
long sec1 = sec/10;
long sec2 = sec%10;
String distance = "";
if(day != 0){
distance += day + "";
}
if(hour != 0){
distance += " "+hour1+hour2 + ""+min1+min2 + ""+sec1+sec2 +"";
}
// System.out.println(distance);
textView.setText(distance);

} catch (ParseException e) {
e.printStackTrace();
}
// long sysTime = System.currentTimeMillis();//获取系统时间
// CharSequence sysTimeStr = DateFormat.format("hh:mm:ss", sysTime);//时间显示格式
// textView.setText(sysTimeStr); //更新时间

/*实时显示现在时间
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = dateformat.format(System.currentTimeMillis());
textView.setText(dateStr);
*/
break;
default:
break;

}
}
};



然后oncreate里面调用
new TimeThread().start(); //启动新的线程