Android 利用SimpleDateFormat将一个long类型的数据变成“HH:mm:ss”格式,实现计时,并解决“08:00:00”问题

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

好了,本文章到此就结束了,谢谢观阅~如果对你有帮助的话别忘了给我点个赞支持以下哦~谢谢

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值