西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发Delphi → android计时器、android 格式化时间计数器的实现

android计时器、android 格式化时间计数器的实现

相关软件相关文章发表评论 来源:西西整理时间:2013/3/11 21:32:04字体大小:A-A+

作者:西西点击:504次评论:1次标签: android计时器

迅雷7v7.9.44.5056 官方最新版
  • 类型:下载工具大小:41M语言:中文 评分:9.9
  • 标签:
立即下载

完整的Android程序,主要功能是实现秒表计时

需求:
默认为"00:00:00",点击开始按钮时清零后开始计时,出现如10:28:34。点击停止的时候停止计时。

问题:
使用Calendar DateFormat的方法,不设置时区获取到的小时是本地时区的(东八区的就是8),设置成GMT标准时区获取到的时间是12小时(12:00:00),设置24小时制无效。

在开始时间加减各种小时都无效,而且计时只能到12小时就自动跳上去了,始终无法出现默认状态00:00:00开始计时的效果。
尝试各种时间设置方法无效后只能自己写一个根据秒数转换时间格式字符串的方法了,经过测试是没问题的,两位数只能显示99小时为最大,如需要更大小时数需要改改方法。
另外小时数也不能无限大,超过long数据类型长度会变成负数的,会出现异常的。

显示效果:

测试类:

 1 public class TestTime {

 2     public static void main(String[] args) {
 3         TestTime tt = new TestTime();
 4         tt.showTimeCount(99*3600000+75*1000);
 5     }
 6     
 7     //时间计数器,最多只能到99小时,如需要更大小时数需要改改方法
 8     public String showTimeCount(long time) {
 9         System.out.println("time="+time);
10         if(time >= 360000000){
11             return "00:00:00";
12         }
13         String timeCount = "";
14         long hourc = time/3600000;
15         String hour = "0" + hourc;
16         System.out.println("hour="+hour);
17         hour = hour.substring(hour.length()-2, hour.length());
18         System.out.println("hour2="+hour);
19         
20         long minuec = (time-hourc*3600000)/(60000);
21         String minue = "0" + minuec;
22         System.out.println("minue="+minue);
23         minue = minue.substring(minue.length()-2, minue.length());
24         System.out.println("minue2="+minue);
25         
26         long secc = (time-hourc*3600000-minuec*60000)/1000;
27         String sec = "0" + secc;
28         System.out.println("sec="+sec);
29         sec = sec.substring(sec.length()-2, sec.length());
30         System.out.println("sec2="+sec);
31         timeCount = hour + ":" + minue + ":" + sec;
32         System.out.println("timeCount="+timeCount);
33         return timeCount;
34     }
35     
36 }


实际例子:

 1 //时间计数器,最多只能到99小时,如需要更大小时数需要改改方法

 2     public String showTimeCount(long time) {
 3         if(time >= 360000000){
 4             return "00:00:00";
 5         }
 6         String timeCount = "";
 7         long hourc = time/3600000;
 8         String hour = "0" + hourc;
 9         hour = hour.substring(hour.length()-2, hour.length());
10         
11         long minuec = (time-hourc*3600000)/(60000);
12         String minue = "0" + minuec;
13         minue = minue.substring(minue.length()-2, minue.length());
14         
15         long secc = (time-hourc*3600000-minuec*60000)/1000;
16         String sec = "0" + secc;
17         sec = sec.substring(sec.length()-2, sec.length());
18         timeCount = hour + ":" + minue + ":" + sec;
19         return timeCount;
20     }
21     
22     private Handler stepTimeHandler;
23     private Runnable mTicker;
24     long startTime = 0;
25     
26     //开始按钮
27     class startBtnListener implements OnClickListener {
28         @Override
29         public void onClick(View v) {
30             Button b = (Button)v;
31             String buttonText = b.getText().toString();
32             if("Start".equalsIgnoreCase(buttonText)){
33                 b.setText("Stop");
34                 // 清零 开始计时
35                 stepTimeTV.setText("00:00:00");
36                 stepTimeHandler = new Handler();
37                 startTime = System.currentTimeMillis();
38                 mTicker = new Runnable() {
39                     public void run() {
40                         String content = showTimeCount(System.currentTimeMillis() - startTime);
41                         stepTimeTV.setText(content);
42 
43                         long now = SystemClock.uptimeMillis();
44                         long next = now + (1000 - now % 1000);
45                         stepTimeHandler.postAtTime(mTicker, next);
46                     }
47                 };
48                 //启动计时线程,定时更新
49                 mTicker.run();
50             }else{
51                 b.setText("Start");
52                 //停止计时 Remove any pending posts of Runnable r that are in the message queue.
53                 stepTimeHandler.removeCallbacks(mTicker);
54             }
55         }
56     }


用时间格式化的方式测试代码:

 1     //开始按钮 通过Calendar时间设置的方式,无法正常显示小时为0

 2     class startBtnListener implements OnClickListener {
 3         @Override
 4         public void onClick(View v) {
 5             Button b = (Button)v;
 6             String buttonText = b.getText().toString();
 7             if("Start".equalsIgnoreCase(buttonText)){
 8                 b.setText("Stop");
 9                 // 清零 开始计时
10                 stepTimeTV.setText("00:00:00");
11                 if (mCalendar == null) {
12                     mCalendar = Calendar.getInstance();
13                     TimeZone tz = TimeZone.getTimeZone("GMT");//GMT+8
14                     mCalendar.setTimeZone(tz);
15                     mCalendar.get(Calendar.HOUR_OF_DAY);//24小时制
16                 }
17                 stepTimeHandler = new Handler();
18                 //System.uptimeMillis()         //记录从机器启动后到现在的毫秒数,当系统进入深度睡眠时,此计时器将会停止
19                 //System.currentTimeMillis()   //返回自1970年1月1日到现在的毫秒数,通常用来设置日期和时间
20                 //System.elapsedRealtime()   //返回从机器启动后到现在的毫秒数,包括系统深度睡眠的时间,api里没有这个方法
21                 //直接取得的是当地时区时间,当地时间跟时区有关,设置GMT后始终多12小时
22                 startTime = System.currentTimeMillis();//12*3600000  - 36*3600000减掉或者加上12小时都不行 
3                 mTicker = new Runnable() {
24                     public void run() {
25                         //这个减出来的日期是1970年的  时间格式不能出现00:00:00 12:00:00
26                         long showTime = System.currentTimeMillis() - startTime;
27                         Log.i(TAG,showTime+"");
28                         mCalendar.setTimeInMillis(showTime + 13*3600000 + 1000);
29                         String content = (String) DateFormat.format(mFormat, mCalendar);
30                         stepTimeTV.setText(content);
31 
32                         long now = SystemClock.uptimeMillis();
33                         long next = now + (1000 - now % 1000);
34                         stepTimeHandler.postAtTime(mTicker, next);
35                     }
36                 };
37                 //启动计时线程,定时更新
38                 mTicker.run();
39             }else{
40                 b.setText("Start");
41                 //停止计时 Remove any pending posts of Runnable r that are in the message queue.
42                 stepTimeHandler.removeCallbacks(mTicker);
43             }
44         }
45     }
46     
47     private Handler stepTimeHandler;
48     Calendar mCalendar;
49     String mFormat = "yyyy-MM-dd hh:mm:ss";//yyyy-MM-dd
50     long startTime = 0;
51     private Runnable mTicker;


    迅雷种子搜索
    (17)迅雷种子搜索
    迅雷搜索浏览器是一款种子磁力资源搜索平台软件,支持独家的种子下载功能,超多的搜索渠道基本满足任何用户的搜索需求。本次放出种子搜索浏览器pc版,安卓版,苹果版资源下载,想要一款bt搜索神器类应用的朋友们不要错过哦!...更多>>
    • 迅雷7官方版v7.9.44.5056

      05-09 / 17.4M

      推荐理由:迅雷7主界面最大的变化就是新加入的“炫彩换肤”功能,通过该功能,用户可以方便直观的对迅雷7主界面进行换
    • 百度网盘极速上传控件V2.0.0.3 官方

      03-29 / 438KB

      推荐理由:新增极速上传控件,支持文件秒传、断点续传、支持4G大文件上传、支持单次上传1000个文件.支持IE、谷歌浏览器
    • 百度网盘v10.0.22 安卓版

      07-18 / 74.4M

      推荐理由:百度网盘下载,在众多互联网大鳄都推出了免费网盘后,互联网大神百度也耐不住了,推出了百度网盘。通过你的百
    • 迅雷快鸟最新版4.1.2 无限流量版

      01-17 / 4.5M

      推荐理由:迅雷快鸟破解版是迅雷快鸟电脑版的特别版本,这一版本为用户修改了迅雷快鸟正式版中的vip和流量限制,用户使
    • 迅雷7v7.9.44.5056 官方最新版

      10-16 / 41M

      推荐理由:迅雷7拥有国内80%以上的用户使用的下载工具。使用迅雷7官方下载,要注意它在后台自动上传文件,P2P的都会这
    • 极速迅雷v9.1.41 官方最新版

      10-16 / 41M

      推荐理由:谈到下载利器,大家熟悉的有迅雷、QQ旋风。论到资源数量时,还是迅雷优先。但是对于普通用户来说,迅雷捆绑
    百度网盘搜索神器
    (17)百度网盘搜索神器
    西西为大家带来的这款种子百度网盘搜索神器p合集包含安卓、电脑、苹果、mac等相关版本,无论你使用的是何种设备,都可以使用这款百度网盘搜索神器进行资源搜索、解析、下载、播放服务哟。...更多>>
    • 百度网盘v10.0.22 安卓版

      07-18 / 74.4M

      推荐理由:百度网盘下载,在众多互联网大鳄都推出了免费网盘后,互联网大神百度也耐不住了,推出了百度网盘。通过你的百
    • 百度网盘2019官方最新版V10.0.43 手

      08-26 / 79.2M

      推荐理由:百度网盘2019最新版为大家带来,这是一款人手必备的云端储存软件,全新的界面和功能,为用户带来更加流畅便
    • 迅雷7官方版v7.9.44.5056

      05-09 / 17.4M

      推荐理由:迅雷7主界面最大的变化就是新加入的“炫彩换肤”功能,通过该功能,用户可以方便直观的对迅雷7主界面进行换
    • 迅雷快鸟最新版4.1.2 无限流量版

      01-17 / 4.5M

      推荐理由:迅雷快鸟破解版是迅雷快鸟电脑版的特别版本,这一版本为用户修改了迅雷快鸟正式版中的vip和流量限制,用户使
    • 迅雷7v7.9.44.5056 官方最新版

      10-16 / 41M

      推荐理由:迅雷7拥有国内80%以上的用户使用的下载工具。使用迅雷7官方下载,要注意它在后台自动上传文件,P2P的都会这
    • 极速迅雷v9.1.41 官方最新版

      10-16 / 41M

      推荐理由:谈到下载利器,大家熟悉的有迅雷、QQ旋风。论到资源数量时,还是迅雷优先。但是对于普通用户来说,迅雷捆绑
    迅雷x搜索神器
    (17)迅雷x搜索神器
    迅雷x可抓取全球ED2k网络磁力种子链接,简单便捷的搜索到ED2K网络上共享的海量影音娱乐学习资料等资源。包含电影种子,动漫种子,电视剧种子,综艺节目种子。资源链接可以用电驴或者迅雷下载工具下载,非常方便。...更多>>
    • 迅雷7官方版v7.9.44.5056

      05-09 / 17.4M

      推荐理由:迅雷7主界面最大的变化就是新加入的“炫彩换肤”功能,通过该功能,用户可以方便直观的对迅雷7主界面进行换
    • 迅雷快鸟最新版4.1.2 无限流量版

      01-17 / 4.5M

      推荐理由:迅雷快鸟破解版是迅雷快鸟电脑版的特别版本,这一版本为用户修改了迅雷快鸟正式版中的vip和流量限制,用户使
    • 迅雷7v7.9.44.5056 官方最新版

      10-16 / 41M

      推荐理由:迅雷7拥有国内80%以上的用户使用的下载工具。使用迅雷7官方下载,要注意它在后台自动上传文件,P2P的都会这
    • 极速迅雷v9.1.41 官方最新版

      10-16 / 41M

      推荐理由:谈到下载利器,大家熟悉的有迅雷、QQ旋风。论到资源数量时,还是迅雷优先。但是对于普通用户来说,迅雷捆绑
    • 迅雷极速版v1.0.35.366 绿色精简版

      11-27 / 17.2M

      推荐理由:迅雷精简版是迅雷公司开发的轻量级下载利器~具有速度快,无广告,高效率的特点~~~虽然综合实力不能与迅雷7等
    • 百度网盘9.6.10 官方最新版

      04-19 / 233.8M

      推荐理由:百度网盘iphone版一般用来做网盘用,速度快,而且存储放心稳定。百度网盘iphone版是百度推出的一款云存储服
    迅雷下载
    (17)迅雷下载
    迅雷下载是西西为大家收集整理的一些种子磁力下载工具,这些软件可以帮你下载迅雷链接或种子文件。迅雷下载是我们日常生活中常见的一种下载方式,一般常见于一些大文件或者大的游戏,磁力下载的工具有很多,包括我们耳熟能详的uTorrent、电驴、迅雷等,这里西西提供的磁力下载工具除了电脑版的之外还有一些手机版工具。...更多>>
    迅雷7
    (63)迅雷7
    迅雷7是迅雷官方的一款最经典版本,使用多年,经久不衰,而且由于界面简约,所以深受广大用户的信赖。迅雷7完全支持当前网络中的各类浏览器与相关下载任务,所以大家无须担心版本过期问题。迅雷7在迅雷官网平台已经无法找到,网络中的许多旧版都是未升级版本,大家需要使用请认西西软件园。...更多>>

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(1)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)