时间戳<--->时间日期 && Android SystemClock 小结

本文介绍了Android开发中处理时间的关键技巧,包括使用CountDownTimer注意事项、网络时间同步方法、时间戳转换为日期的具体实现,以及SystemClock与System.currentTimeMillis的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在限时抢购的活动的,倒计时的当前时间,必须是获取的网络时间,不然系统工具获得只是手机的时间,是很有可能出现不一致的情况的~

CountDownTimer在使用的时候,需要在Activity销毁的时候,进行回收处理。mCountDownTimer.cancel();

可以考虑在项目初始化的时候,通过工具类+Timer计时器,一直保存一个同步的互联网时间。



String类型的php时间必须使用Long类型来转化,不然的话,2038年的时间就会超过int的最大值、、、
// String time = sdf.format((long) (Integer.parseInt(longString)) * 1000);
String time = sdf.format((long) (Long.parseLong(longString)) * 1000);


时间戳转化成日期
String time = format.format(new Date(vtime * 1000));
// String time = format.format(vtime);
// String time = format.format(new Date(vtime * 1000));
String time = format.format(new Date((long) vtime * 1000));
// LogUtils.e("mxg", "vtime == " + vtime + ";time == " + time);
tv_renewal_time.setText("有效期至:" + time.replace("-", "."));



注意:以后计算时间的间隔,全部使用SystemClock.elapsedRealtime()来进行比较;(可以考虑System.currentTimeMillis)

在Java中我们处理线程同步问题时,处理延迟可能会使用Thread类的sleep方法,这里抛开concurrent类的一些方法;

值得一提的是,这个类还提供了另外一个方法,  public static void sleep(long ms),
这个方法就是封装了Thread.sleep方法,但是不会抛出InterruptedException


http://blog.youkuaiyun.com/tianfeng701/article/details/7562359

在Andriod中关于线程一部分中经常会遇到计算时间的操作,这里面应用较多的是SystemClock类,这个类仅仅是一个获取系统时间、运行时间的工具类。

这个类有两个主要的静态方法uptimeMillis()和 elapsedRealtime().

我们来看一下这两个函数的实际含义,以下是源码中的注释

  Returns milliseconds since boot, not counting time spent in deep sleep.      

  This value may get reset occasionally         

native public static long uptimeMillis();

Returns milliseconds since boot, including time spent in sleep.         

native public static long elapsedRealtime();


由此可见,

uptimeMillis()返回的是系统从启动到当前处于非休眠期的时间。

elapsedRealTime()返回的是系统从启动到现在的时间。

 

值得一提的是,这个类还提供了另外一个方法,  public static void sleep(long ms),

这个方法就是封装了Thread.sleep方法,但是不会抛出InterruptedException


-----------------------------------------------------------补充内容-------------------------------------------------------------------------------------------------------

所谓android深度睡眠,即屏幕关闭后,一段时间不做任何操作,不连接usb,然后在一定时间后,手机很多服务、进程都睡眠了,不再运行。


很多情况下,不管是我们自己使用时间间隔来做一些算法,或是调用系统的API,比如动画效果,都会需要基于时间间隔来做,通常做法是:记录开始时间 startTime,然后每次回调时,获取当前时间  currentTime,计算差值 = currentTime - startTime,而获取当前时间,系统提供了两种方法:
SystemClock.uptimeMillis 和 System.currentTimeMillis

这两种方法有何区别呢?
1. SystemClock.uptimeMillis()  // 从开机到现在的毫秒数(手机睡眠的时间不包括在内);
2. System.currentTimeMillis() // 从1970年1月1日 UTC到现在的毫秒数;
但是,第2个时间,是可以通过System.setCurrentTimeMillis修改的,那么,在某些情况下,一但被修改,时间间隔就不准了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值