1、利用SimpleDateFormat实现计时
在Android中利用SimpleDateFormat,将一个long类型的数据,变换成“HH:mm:ss”格式的String类型,以实现计时显示。
首先需要获取一个开始的基准时间startMils,
long startMils=SystemClock.elapsedRealtime();
然后启动一个定时器timer,每次定时1s触发;每次触发的时候,都会获取当前时间存放到endMils里面去,然后利用
time=endMils-startMils,即可得到每次定时器触发的时候,距离定时器启动时的时间间隔。并将该时间间隔通过SimpleDateFormat,转换为“HH:mm:ss”格式的String类型,用于显示。定时器代码如下:
Timer timer=new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
long endMils= SystemClock.elapsedRealtime();
long time=endMils-startMils;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss");
String dateString = simpleDateFormat.format(time);
Log.i(TAG,"time="+time+"ms");
Log.i(TAG,"dataString="+dateString);
}
},0,1000);
2、解决“08:00:00”问题
但是,在控制台的输出结果打印中,发现了一个奇怪的现象。
打印结果:
time=4002ms
dataString=08:00:04
本来我想要的结果是,“00:00:04”,结果现在在小时刻度这里给我多了个8小时....此刻我的内心是懵逼的=.=
明明就是4s,咋前面就多了个8小时呢?忽然灵光一闪,好像咱们中国的时区是东8时区?
后来发现,SimpleDateFormat在使用的时候,会自动默认加上当前所在国家的一个区时,即
GMT+x,
其中,GMT就是格林威治标准时间的英文缩写(Greenwich Mean Time 格林尼治标准时间),是世界标准时间,x就是对应所在的区时,而中国在东八区,故而为:GMT+8
即在使用SimpleDateFormat的时候,自动调用了以下代码
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+08:00"));
这就导致了,上述现象的产生。而我所需要的仅仅只是利用SimpleDateFormat来实现“HH:mm:ss”格式的计时,与所在时区无关,故而需要加上以下代码
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+00:00"));
再运行,发现结果就没有问题了,试验运行结果如下:
time=6003ms
dataString=00:00:06
好了,本文章到此就结束了,谢谢观阅~如果对你有帮助的话别忘了给我点个赞支持以下哦~谢谢