最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android計時器,時間計算器的實現(xiàn)方法

 更新時間:2013年03月12日 11:15:24   作者:  
android計時器,時間計算器的實現(xiàn)方法,需要的朋友可以參考一下

需求:默認為"00:00:00",點擊開始按鈕時清零后開始計時,出現(xiàn)如10:28:34。點擊停止的時候停止計時。
問題:使用Calendar DateFormat的方法,不設置時區(qū)獲取到的小時是本地時區(qū)的(東八區(qū)的就是8),設置成GMT標準時區(qū)獲取到的時間是12小時(12:00:00),設置24小時制無效。
在開始時間加減各種小時都無效,而且計時只能到12小時就自動跳上去了,始終無法出現(xiàn)默認狀態(tài)00:00:00開始計時的效果。
嘗試各種時間設置方法無效后只能自己寫一個根據(jù)秒數(shù)轉換時間格式字符串的方法了,經過測試是沒問題的,兩位數(shù)只能顯示99小時為最大,如需要更大小時數(shù)需要改改方法。
另外小時數(shù)也不能無限大,超過long數(shù)據(jù)類型長度會變成負數(shù)的,會出現(xiàn)異常的。

顯示效果:

 

 

測試類:

復制代碼 代碼如下:

public class TestTime {
     public static void main(String[] args) {
         TestTime tt = new TestTime();
         tt.showTimeCount(99*3600000+75*1000);
     }

     //時間計數(shù)器,最多只能到99小時,如需要更大小時數(shù)需要改改方法
     public String showTimeCount(long time) {
         System.out.println("time="+time);
         if(time >= 360000000){
             return "00:00:00";
         }
         String timeCount = "";
         long hourc = time/3600000;
         String hour = "0" + hourc;
         System.out.println("hour="+hour);
         hour = hour.substring(hour.length()-2, hour.length());
         System.out.println("hour2="+hour);

         long minuec = (time-hourc*3600000)/(60000);
         String minue = "0" + minuec;
         System.out.println("minue="+minue);
         minue = minue.substring(minue.length()-2, minue.length());
         System.out.println("minue2="+minue);

         long secc = (time-hourc*3600000-minuec*60000)/1000;
         String sec = "0" + secc;
         System.out.println("sec="+sec);
         sec = sec.substring(sec.length()-2, sec.length());
         System.out.println("sec2="+sec);
         timeCount = hour + ":" + minue + ":" + sec;
         System.out.println("timeCount="+timeCount);
         return timeCount;
     }

 }

實際例子:

復制代碼 代碼如下:

//時間計數(shù)器,最多只能到99小時,如需要更大小時數(shù)需要改改方法
     public String showTimeCount(long time) {
         if(time >= 360000000){
             return "00:00:00";
         }
         String timeCount = "";
         long hourc = time/3600000;
         String hour = "0" + hourc;
         hour = hour.substring(hour.length()-2, hour.length());

         long minuec = (time-hourc*3600000)/(60000);
         String minue = "0" + minuec;
         minue = minue.substring(minue.length()-2, minue.length());

         long secc = (time-hourc*3600000-minuec*60000)/1000;
         String sec = "0" + secc;
         sec = sec.substring(sec.length()-2, sec.length());
         timeCount = hour + ":" + minue + ":" + sec;
         return timeCount;
     }

     private Handler stepTimeHandler;
     private Runnable mTicker;
     long startTime = 0;

     //開始按鈕
     class startBtnListener implements OnClickListener {
         @Override
         public void onClick(View v) {
             Button b = (Button)v;
             String buttonText = b.getText().toString();
             if("Start".equalsIgnoreCase(buttonText)){
                 b.setText("Stop");
                 // 清零 開始計時
                 stepTimeTV.setText("00:00:00");
                 stepTimeHandler = new Handler();
                 startTime = System.currentTimeMillis();
                 mTicker = new Runnable() {
                     public void run() {
                         String content = showTimeCount(System.currentTimeMillis() - startTime);
                         stepTimeTV.setText(content);

                         long now = SystemClock.uptimeMillis();
                         long next = now + (1000 - now % 1000);
                         stepTimeHandler.postAtTime(mTicker, next);
                     }
                 };
                 //啟動計時線程,定時更新
                 mTicker.run();
             }else{
                 b.setText("Start");
                 //停止計時 Remove any pending posts of Runnable r that are in the message queue.
                 stepTimeHandler.removeCallbacks(mTicker);
             }
         }
     }

用時間格式化的方式測試代碼:

復制代碼 代碼如下:

//開始按鈕 通過Calendar時間設置的方式,無法正常顯示小時為0
     class startBtnListener implements OnClickListener {
         @Override
         public void onClick(View v) {
             Button b = (Button)v;
             String buttonText = b.getText().toString();
             if("Start".equalsIgnoreCase(buttonText)){
                 b.setText("Stop");
                 // 清零 開始計時
                 stepTimeTV.setText("00:00:00");
                 if (mCalendar == null) {
                     mCalendar = Calendar.getInstance();
                     TimeZone tz = TimeZone.getTimeZone("GMT");//GMT+8
                     mCalendar.setTimeZone(tz);
                     mCalendar.get(Calendar.HOUR_OF_DAY);//24小時制
                 }
                 stepTimeHandler = new Handler();
                 //System.uptimeMillis()         //記錄從機器啟動后到現(xiàn)在的毫秒數(shù),當系統(tǒng)進入深度睡眠時,此計時器將會停止
                 //System.currentTimeMillis()   //返回自1970年1月1日到現(xiàn)在的毫秒數(shù),通常用來設置日期和時間
                 //System.elapsedRealtime()   //返回從機器啟動后到現(xiàn)在的毫秒數(shù),包括系統(tǒng)深度睡眠的時間,api里沒有這個方法
                 //直接取得的是當?shù)貢r區(qū)時間,當?shù)貢r間跟時區(qū)有關,設置GMT后始終多12小時
                 startTime = System.currentTimeMillis();//12*3600000  - 36*3600000減掉或者加上12小時都不行
                 mTicker = new Runnable() {
                     public void run() {
                         //這個減出來的日期是1970年的  時間格式不能出現(xiàn)00:00:00 12:00:00
                         long showTime = System.currentTimeMillis() - startTime;
                         Log.i(TAG,showTime+"");
                         mCalendar.setTimeInMillis(showTime + 13*3600000 + 1000);
                         String content = (String) DateFormat.format(mFormat, mCalendar);
                         stepTimeTV.setText(content);

                         long now = SystemClock.uptimeMillis();
                         long next = now + (1000 - now % 1000);
                         stepTimeHandler.postAtTime(mTicker, next);
                     }
                 };
                 //啟動計時線程,定時更新
                 mTicker.run();
             }else{
                 b.setText("Start");
                 //停止計時 Remove any pending posts of Runnable r that are in the message queue.
                 stepTimeHandler.removeCallbacks(mTicker);
             }
         }
     }

     private Handler stepTimeHandler;
     Calendar mCalendar;
     String mFormat = "yyyy-MM-dd hh:mm:ss";//yyyy-MM-dd
     long startTime = 0;
     private Runnable mTicker;

相關文章

  • 使用kotlin協(xié)程提高app性能(譯)

    使用kotlin協(xié)程提高app性能(譯)

    這篇文章主要介紹了使用kotlin協(xié)程提高app性能(譯),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Android實現(xiàn)美團外賣底部導航欄動畫

    Android實現(xiàn)美團外賣底部導航欄動畫

    這篇文章主要介紹了Android實現(xiàn)美團外賣底部導航欄動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 關于Kotlin委托你必須重視的幾個點

    關于Kotlin委托你必須重視的幾個點

    委托模式已經被證明是實現(xiàn)繼承的一個很好的替代方式,下面這篇文章主要給大家介紹了關于Kotlin委托你必須重視的幾個點,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • Android程序設計之AIDL實例詳解

    Android程序設計之AIDL實例詳解

    這篇文章主要介紹了Android程序設計的AIDL,以一個完整實例的形式較為詳細的講述了AIDL的原理及實現(xiàn)方法,需要的朋友可以參考下
    2014-09-09
  • 解決MySQL忘記密碼問題的方法

    解決MySQL忘記密碼問題的方法

    這篇文章主要為大家分享了一種解決MySQL忘記密碼問題的方法,MySQL忘記密碼怎么辦,不用著急,小編為大家解答,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Android編程實現(xiàn)獲取多媒體庫視頻、音頻、圖片的方法

    Android編程實現(xiàn)獲取多媒體庫視頻、音頻、圖片的方法

    這篇文章主要介紹了Android編程實現(xiàn)獲取多媒體庫視頻、音頻、圖片的方法,涉及Android針對多媒體視頻、音頻及相關專輯圖片、縮略圖等獲取操作實現(xiàn)技巧,需要的朋友可以參考下
    2018-01-01
  • 在Android項目中使用AspectJ的方法

    在Android項目中使用AspectJ的方法

    這篇文章主要介紹了在Android項目中使用AspectJ的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Android手勢操作簡單實例講解

    Android手勢操作簡單實例講解

    這篇文章主要為大家詳細介紹了Android手勢操作簡單實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • android使用videoview播放視頻

    android使用videoview播放視頻

    這篇文章主要介紹了Android利用自帶VideoView控件播放視頻的示例,需要的朋友可以參考下
    2014-02-02
  • Android實現(xiàn)手勢滑動(左滑和右滑)

    Android實現(xiàn)手勢滑動(左滑和右滑)

    這篇文章主要為大家詳細介紹了Android實現(xiàn)手勢滑動,左滑和右滑效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07

最新評論

长顺县| 辽阳市| 亚东县| 安义县| 垦利县| 大新县| 潞西市| 大连市| 清苑县| 固原市| 安吉县| 永丰县| 丰顺县| 本溪市| 理塘县| 沂南县| 交口县| 密山市| 塔城市| 临夏市| 宁津县| 开原市| 密山市| 循化| 阜康市| 浪卡子县| 伽师县| 当涂县| 宝鸡市| 江孜县| 嘉峪关市| 六盘水市| 额尔古纳市| 巴中市| 永清县| 沾化县| 富宁县| 许昌市| 黎平县| 故城县| 元谋县|